Ich kenne keinen signifikanten Unterschied in der Renderleistung zwischen vielen Teilansichten und einer einzelnen Ansicht, wenn Sie denselben Inhalt rendern .
Wenn Sie in einigen Fällen nur einige Teilbilder und in anderen Fällen nur einige Teilbilder rendern, wodurch das Rendervolumen einer bestimmten Ansicht effektiv reduziert wird, können Sie möglicherweise an Geschwindigkeit gewinnen.
Andererseits habe ich immer Teilabstraktisierungen in Betracht gezogen, die mindestens an zwei verschiedenen Stellen verwendet werden sollten, um ihre Existenz zu rechtfertigen. Der andere Grund für die Verwendung von Partials besteht darin, dass Sie dieselbe Ansicht rendern möchten, jedoch unterschiedliche Partials laden möchten, basierend auf der von Ihnen verwendeten Geschäftslogik.
AKTUALISIEREN:
Ich kann keine Messung oder konkrete Zahlen zur Rendergeschwindigkeit anbieten. Wenn Sie einen Teil in einer Ansicht verwenden, rufen Sie zum Rendern die Rendermethode auf, sodass es einen zweiten Methodenaufruf gibt. Dies ist, wie ich in meiner Antwort sagte, fast nichts, kann aber dazu beitragen, die Dinge ein wenig zu beschleunigen.
Ich habe jedoch noch nie von einem Projekt gehört, das sein Leistungsproblem durch Entfernen von Teilbereichen behebt. Partials sind eine gute Möglichkeit, Ansichten einen Wiederverwendungsmechanismus anzubieten, und aus Sicht des Programmierers sollten sie für diesen Bereich verwendet werden. Sie sollten Abstractisierungen für gängige Konzepte in Views sein.
Ich habe an einem Projekt gearbeitet, bei dem Teilstriche übermäßig genutzt wurden. Nicht Rails, sondern die gleichen MVC-Prinzipien. Die Verwendung kleiner Teilstriche für alles, was Sie sich vorstellen können, macht es schwierig, sie zu finden, wenn Sie anfangen, Dutzende von ihnen zu haben. Wo würden Sie nach einem Eingang suchen, der geändert werden soll? In der Ansicht? Teilweise? In welchem Teil gibt es 4 Teiltöne für diese Ansicht? ...
Nach einigen harten Umgestaltungen haben wir bei jeder Aktualisierung einer Ansicht die unnötigen Teileffekte entfernt. Sie sind nicht vollständig verschwunden, aber es bleiben für das Projekt gut definierte Abstractisierungen. Sie stellen gut verstandene Elemente dar (wie ein Baum für eine Art von Objekten oder einen bestimmten Listentyp), die sich in mehreren Ansichten in einer Form oder einer anderen wiederholen. Ich weiß, wenn ich einen Baum sehe, gibt es dafür einen Teil. Ich weiß, wenn ich bestimmte Arten von Listen sehe, dass es dafür einen Teil gibt. Ich habe sie nicht gejagt.
Codelesbarkeit ist das Wichtigste, was man für eine Software-Codebasis tun kann.
Code readability
, darum geht es.Ich bin mit beiden Antworten nicht einverstanden. Ich habe den Code von einem Teil in die Position kopiert und eingefügt, an der er im Teil der übergeordneten Ansicht vorhanden ist, und mit 500 Iterationen werden 600 ms weniger Zeit benötigt, um die Ansicht zu rendern. <% = xyz rendern%> ist meiner meinung nach sehr kaputt.
Beispiel, Gesamtzeit zum Rendern der Ansicht:
Bearbeitet
Am Ende habe ich alle _Partials im _Model-Partial unDRYed und auf ~ 2000ms reduziert. Zu diesem Zeitpunkt habe ich versucht, das _Model-Partial in den Index zu verschieben. Dies hatte jedoch KEINE Auswirkungen auf die Renderzeiten macht es.
quelle
Kein Rails-Typ, aber Partial Views sind wahrscheinlich nicht das eigentliche Problem. Es klingt eher so, als würden Sie ein bisschen SELECT N + 1 machen. Sehen Sie sich die Dinge aus der Perspektive des DB-Servers an, um sicherzustellen, dass Sie sie nicht zu Brei schlagen.
quelle
Derzeit wird an einer Rails 4.2-App gearbeitet, bei der eine langsame Aktion im Durchschnitt ca. 745 ms dauerte.
Wenn ich den Code aus den Teilbereichen entferne und ihn in die Hauptvorlage einfüge, dauert es jetzt im Durchschnitt weniger als 25 ms.
Die Anzahl der Aufrufe zum Rendern der Teilnachrichten betrug nur 29.
quelle
Auch wenn Sie kein n + 1-Problem haben und die gesamte Datenbank im Voraus bearbeiten (z. B. mit einem rekursiven CTE), sind verschachtelte Partials immer noch sehr langsam. Haml und Erb sehen beide langsam aus. On Rails 5.1.4 Ich sehe ein paar Millisekunden für jeden Teil plus gelegentliche Teiltöne, die viel schlimmer sind (wahrscheinlich entsprechend der Speicherbereinigung).
Ich habe festgestellt, dass beim Umbenennen des Teils, während eine dieser Anforderungen ausgeführt wird, sofort eine Fehlermeldung angezeigt wird, dass die Datei nicht gefunden wurde. Offensichtlich liest Rails die partielle Off-Platte, parst sie neu und wertet sie für jede Iteration aus. Kein Wunder, dass es langsam ist!
quelle
Ein Großteil der Langsamkeit, die in verschachtelten Teilbereichen zu sehen ist, tritt nur während der Entwicklung auf. Wechseln Sie zum Testen in die Produktion.
quelle