Zweig: render vs include

9

Ich erstelle einen Online-Shop. Ich habe ein Performance-Problem, wenn ich die Zweigfunktion "render" anstelle von "include" verwende.

Hier ist der Code, der einen Produktkatalog anzeigt:

Katalog-Controller:

%Vor%

... Vorlage für Katalog-Controller:

%Vor%

... Produktcontroller:

%Vor%

... einfache (aber komplexere) Vorlage für den Produktcontroller:

%Vor%

Also wenn ich verwende:

%Vor%

... alles ok: 147ms und 4608Kb Speicher.

Aber wenn ich einen Controller brauche, um das Produkt anzuzeigen:

%Vor%

... mein Skript verbraucht zu viel Zeit und Speicher: 3639ms und 17664Kb Speicher!

Wie erhöht man die Geschwindigkeit und reduziert den Speicherverbrauch durch Verwendung des Controllers?

    
George 31.01.2012, 09:21
quelle

2 Antworten

4

Jeder Render-Aufruf erzeugt eine neue Anforderung mit dem Problem der Leistungsverschlechterung, das Sie beschreiben. Ich glaube nicht, dass Sie viel dagegen tun können, sondern esi-Caching verwenden, damit einzelne Fragmente, die von Renderaufrufen kommen, zwischengespeichert werden können. Andernfalls könnten Sie versuchen, Ihre Logik zu überarbeiten, um die Verwendung von Renderaufrufen zu reduzieren.

    
Aldo Stracquadanio 31.01.2012 12:30
quelle
0

Korrigiere mich, wenn ich falsch liege, aber die Grundidee ist, dass im Grunde "kopiere-paste" seinen Inhalt anstelle des Befehls.

Während der Render-Befehl den Controller zuerst erstellen, ihn initialisieren, die entsprechende Funktion ausführen muss usw. Wer weiß also, welche schwere Artillerie in den Klassen, Konstruktoren usw. dieses Controllers oder Elternteils versteckt ist?

Denken Sie auch daran, dass selbst enthaltene Vorlagen gerendert werden. So könnten Sie beim Rendern von Zweigen sogar Rekursionen oder Ähnliches bekommen. Persönlich versuche ich zu vermeiden, etwas außerhalb des Controllers Rendern Rendern.

Plus wie von Louis-Philippe Huberdeau in Kommentaren erwähnt, kann die Entwicklungsumgebung aufgrund verschiedener Optionen und Protokollierung drastisch vom Startmodus abweichen.

Wie bei den Hinweisen - versuchen Sie es, Logik in Ihre Controller zu stecken, oder verwenden Sie statische Objekte, die oft in Controllern verwendet werden, um sie wiederzuverwenden, anstatt immer neue zu erstellen. Und Rendern nur von Controllern

    
GodlyHedgehog 07.03.2017 16:18
quelle

Tags und Links