Nie znam żadnej istotnej różnicy w wydajności renderowania między wieloma częściami i jednym widokiem podczas renderowania tej samej treści.
Oczywiście, jeśli renderujesz tylko niektóre częściowe w niektórych przypadkach, a inne w innych przypadkach, takie jak skuteczne zmniejszenie głośności renderowania określonego widoku, możesz zyskać trochę prędkości.
Z drugiej strony zawsze rozważałem abstrakcje cząstkowe, które należy wykorzystać przynajmniej z 2 różnych miejsc, aby uzasadnić ich istnienie. Innym powodem korzystania z częściowych jest to, że chcesz renderować ten sam widok, ale ładować różne częściowe na podstawie posiadanej logiki biznesowej.
AKTUALIZACJA:
Nie mogę zaoferować pomiaru ani konkretnych liczb na temat prędkości renderowania. Jeśli używasz częściowego w widoku, aby go wyrenderować, wywołujesz metodę renderowania, więc istnieje drugie wywołanie metody. To, jak powiedziałem w mojej odpowiedzi, jest prawie niczym, ale może nieco przyspieszyć.
Jednak nigdy nie słyszałem o projekcie, który rozwiązuje problem z wydajnością poprzez usunięcie części. Częściowe są dobrym sposobem na zaoferowanie mechanizmu ponownego wykorzystania widoków iz punktu widzenia programistów powinny być używane w tym zakresie. Powinny być abstrakcjami typowych pojęć w widokach.
Pracowałem nad projektem, w którym częściowe były nadmiernie używane. Nie szyny, ale te same zasady MVC. Używanie małych cząsteczek do wszystkiego, co możesz sobie wyobrazić, sprawia, że trudno je znaleźć, gdy zaczniesz mieć ich dziesiątki. Gdzie chciałbyś zmodyfikować dane wejściowe? W widoku? Częściowo? W której części znajdują się 4 częściowe tego widoku? ...
Po pewnych trudnych zmianach, przy każdej aktualizacji widoku usuwaliśmy niepotrzebne częściowe. Nie zniknęły całkowicie, ale pozostały abstrakcje, które są dobrze zdefiniowane dla projektu. Reprezentują one dobrze rozumiane elementy (takie jak drzewo dla pewnego rodzaju obiektów lub określonego typu listy), które powtarzają się w formie lub innej na kilku widokach. Wiem, jeśli widzę drzewo, że jest to częściowe. Wiem, kiedy widzę pewien rodzaj listy, że jest na to częściowa. Nie muszę ich tropić.
Czytelność kodu jest najważniejszą rzeczą, jaką można zrobić dla podstawy kodu oprogramowania.
Code readability
, o to w tym wszystkim chodzi.Nie zgadzam się z obiema odpowiedziami. Skopiowałem i wkleiłem kod z częściowego do pozycji, w której jest on obecny w widoku nadrzędnym częściowo, a przy 500 iteracjach zajmuje to ogromnie 600 ms czasu potrzebnego do renderowania widoku. <% = render xyz%> jest moim zdaniem bardzo zepsuty.
Przykład: całkowity czas renderowania widoku:
Edytowane
Skończyło się ODWRÓCANIE wszystkich _partials w części _model i sprowadziłem go do ~ 2000ms, w którym to momencie próbowałem przenieść _model częściowy do indeksu, jednak NIE miało to żadnego wpływu na czasy renderowania, więc myślę, że to z wywołaniami zagnieżdżonego renderowania, które czy to.
źródło
Nie jest facetem od szyn, ale Częściowe Widoki prawdopodobnie nie stanowią problemu per se. Raczej wygląda na to, że wykonujesz trochę WYBORU N + 1. Spójrz na rzeczy z perspektywy serwera DB, aby upewnić się, że nie bijesz go w miazgę.
źródło
Pracuję teraz w aplikacji Rails 4.2, gdzie powolne działanie trwało średnio około 745 ms.
Kiedy usuwam kod z części i umieszczam go w głównym szablonie, czas potrzebny jest teraz średnio poniżej 25 ms.
Liczba wywołań częściowych wyniosła tylko 29.
źródło
Nawet jeśli nie masz problemu n + 1 i wykonujesz całą pracę bazy danych z góry (powiedzmy z rekurencyjnym CTE), zagnieżdżone części są nadal bardzo wolne. Haml i Erb patrzą na mnie powoli. Na Railsach 5.1.4 widzę kilka milisekund dla każdej części, plus sporadyczne części, które są znacznie gorsze (prawdopodobnie odpowiadające odśmiecaniu).
Zauważyłem, że jeśli zmienię nazwę częściową, gdy jedno z tych żądań jest uruchomione, natychmiast pojawia się błąd dotyczący tego, że plik nie został znaleziony. Najwyraźniej Railsy odczytują częściowe dyski, analizują je i oceniają dla każdej iteracji. Nic dziwnego, że jest wolny!
źródło
Wiele spowolnienia widocznego w zagnieżdżonych częściach cząstkowych zdarza się tylko podczas opracowywania. Przejdź do produkcji, aby przetestować.
źródło