Symfony2 und Twig rendern mit Leistungsproblemen

8

Genau wie in diesem Thema habe ich ein Leistungsproblem im Dev-Modus, wenn ich ein Zweig "rendern" -Tag in meiner App (verwandte Dokumentation: Eingebettete Controller ).

Ohne dieses Render-Tag werden meine Seiten in weniger als 70 ms erstellt. Mit dem Render-Tag sind es mindestens 170 ms. Und jedes in der App hinzugefügte Render-Tag erhöht die Seitengenerierung um 100 ms (was A LOT ist: Warum läuft eine normale Seite in 60 ms und ein Render-Tag in 100 ms?). Ich brauche vielleicht 4 oder 5 von ihnen auf jeder Seite meiner App, also würde das für jede Seite im Dev-Modus mindestens 500 ms bedeuten.

Ich verstehe vollkommen, dass es im Prod-Modus kein Problem gibt, aber in der Entwicklung ist es eindeutig nicht komfortabel. Also, kennt jemand eine Möglichkeit, nutzlose Anrufe, Logs oder Codes loszuwerden, während das "render" -Tag im Dev-Modus verwendet wird?

    
Nanocom 25.03.2012, 18:02
quelle

5 Antworten

8

Ich habe erklärt es gerade vor 10 Stunden. Lange Rede, kurzer Sinn: Migration zu Twig-Erweiterungen.

    
Elnur Abdurrakhimov 25.03.2012, 20:03
quelle
8

Eines meiner Lieblingsfeatures in Symfony ist das Render-Tag, das Controller-Aufrufe einbettet. Der Profiler fügt jedoch jedem Controller-Aufruf viel Overhead hinzu, nicht nur Geschwindigkeit, sondern auch viel Speicher. Sie haben ein paar Optionen, um es zu beschleunigen.

Der Profiler schreibt standardmäßig alle Daten in eine SQLite-Datenbank. IIRC sqlite erlaubt keine parallelen Einfügungen, so dass jede Anfrage warten muss, bis sie dran sind, um auf die db zuzugreifen, um Datensammler zu leeren. Sie können Ihre Entwicklungs-DB (mysql oder was auch immer Sie verwenden) verwenden, um Profiler-Daten persistent zu machen. Vor einem Jahr habe ich damit in puncto Geschwindigkeit viel gewonnen.

Sie können den Profiler auch für Unteranforderungen deaktivieren oder den Profiler nur verwenden, wenn eine Ausnahme auftritt. In der Framework-Konfigurationsreferenz finden Sie die vollständigen Details.

%Vor%     
Bártfai Tamás 26.03.2012 11:39
quelle
6

Sie können Ihre Steuerungslogik in einen Service verschieben und als globale Variable des Zweigs referenzieren und dann die vom Controller gerenderte Vorlage einfügen.

Siehe Ссылка für Anweisungen.

    
Mun Mun Das 25.03.2012 19:20
quelle
2

Die Wahl hängt von Ihrer Anwendung ab. Ich glaube, dass die praktischsten Wege sind:

1) Verwenden Sie das render -Tag für schwer gerenderte Vorlagen und verwenden Sie Bibliothek einschließen, um sie asynchron zu laden. Dies ist sehr hilfreich, wenn jede Vorlage, die gerendert werden soll, "langsam" ist (z. B. viele DB-Verbindungen, große Texte usw.).

2) Führen Sie die Schritte wie m2mdas durch. Dies ist eine sehr schnelle Lösung für häufige Fälle.

    
JeanValjean 22.01.2013 09:10
quelle
0

Ich würde auch Elnurs Vorschlag mit Zweigverlängerungen folgen. Eine Alternative wäre das Sonata Block Bundle: Ссылка . Der Overhead eines Unterantrags mit Sonata Block ist ungefähr 7ms afair.

    
hacfi 29.07.2014 21:29
quelle

Tags und Links