Search the FirstSpirit Knowledge Base
Hallo, ich bin gerade dabei unseren neuen Internetauftritt umzusetzen.
In dem neuen Auftritt haben wir unter anderem ein "statisches" Menü, dass für Seiten eines bestimmten Bereiches immer identisch ist. Dieses Menü wird aus Einträgen einer Datenquelle generiert.
Nun würde dieses Menü bei den Seiten des Bereiches generiert werden. Das "verbrät" natürlich Zeit.
Kann ich mir "irgendwo" das Menü nach der ersten Generierung in einer Seite hinlegen und dann darauf zurückgreifen?
Ist das überhaupt möglich und wenn ja wie?
Danke schom mal für Hinweise/Tips
Hallo Herr Vogt,
ohne den dazugehörigen Text hätte ich auf die Fragestellung in der Überschrift mit:
Einfach den Quelltext der Projekteinstellungsseite benutzen [also innerhalb des entsprechenden Ausgabekanals der Seitenvorlage für die globale Einstellungsseite diese Definitionen vornehmen, z.B. $CMS_SET(myGlobalVar,"globaler Inhalt")$]
Leider haben Sie im Text dann aber gleich merhfach diesen Lösungsansatz zunichte gemacht:
- Wenn das Menü aus Einträgen einer Datenquelle generiert wird, wird wahrscheinlich eine ContentSelect Funktion benutzt, evtl. auch eine Navigationsfunktion. Funktionen werden normalerweise bei jedem Aufruf neu ausgewertet, so dass eine entsprechende Definition keinen Geschwindigkeitsgewinn bringen würde. [Die contentSelect Funktion ist da allerdings eine Ausnahme {wird nur einmal ausgewertet}, so dass es mit dieser wieder klappen sollte {solange der Ausnahmestatus erhalten bleibt}.] Gegebenenfalls müsste das Funktionsergebnis erst in einen String umgewandelt werden, bevor es in der globalen Variable sinnvoll zwischengespeichert werden kann.
Weiterhin schreiben Sie von "Seiten eines Bereichs" - das klingt nun wieder so, als würden Sie die Variablen nicht global, sondern nur innerhalb eines bestimmten Bereichs benötigen. Da macht dann auch eine globale Definition wieder keinen Sinn.
Aber eine nicht unwichtige Frage in diesem Zusammenhang wäre dann auch, wieviel Zeit die Generierung des Menüs denn nun benötigt. Vielleicht sollten Sie dies zuerst evaluieren
Die entsprechende Zeitmessung können Sie folgendermaßen durchführen:
$CMS_SET(startTimer,#global.now.milliseconds)$
$CMS_VALUE(<Entsprechender Funktionsaufruf>)$
$CMS_SET(endTimer,#global.now.milliseconds)$Zeitmessung:$CMS_VALUE(endTimer-startTimer)$ms
Sie sollten mehrere Messungen durchführen, um aussagekräftige Werte zu bekommen.
Viele Grüsse aus Dortmund,
Holger Höbbel
Hallo Herr Vogt,
ohne den dazugehörigen Text hätte ich auf die Fragestellung in der Überschrift mit:
Einfach den Quelltext der Projekteinstellungsseite benutzen [also innerhalb des entsprechenden Ausgabekanals der Seitenvorlage für die globale Einstellungsseite diese Definitionen vornehmen, z.B. $CMS_SET(myGlobalVar,"globaler Inhalt")$]
Leider haben Sie im Text dann aber gleich merhfach diesen Lösungsansatz zunichte gemacht:
- Wenn das Menü aus Einträgen einer Datenquelle generiert wird, wird wahrscheinlich eine ContentSelect Funktion benutzt, evtl. auch eine Navigationsfunktion. Funktionen werden normalerweise bei jedem Aufruf neu ausgewertet, so dass eine entsprechende Definition keinen Geschwindigkeitsgewinn bringen würde. [Die contentSelect Funktion ist da allerdings eine Ausnahme {wird nur einmal ausgewertet}, so dass es mit dieser wieder klappen sollte {solange der Ausnahmestatus erhalten bleibt}.] Gegebenenfalls müsste das Funktionsergebnis erst in einen String umgewandelt werden, bevor es in der globalen Variable sinnvoll zwischengespeichert werden kann.
Weiterhin schreiben Sie von "Seiten eines Bereichs" - das klingt nun wieder so, als würden Sie die Variablen nicht global, sondern nur innerhalb eines bestimmten Bereichs benötigen. Da macht dann auch eine globale Definition wieder keinen Sinn.
Aber eine nicht unwichtige Frage in diesem Zusammenhang wäre dann auch, wieviel Zeit die Generierung des Menüs denn nun benötigt. Vielleicht sollten Sie dies zuerst evaluieren
Die entsprechende Zeitmessung können Sie folgendermaßen durchführen:
$CMS_SET(startTimer,#global.now.milliseconds)$
$CMS_VALUE(<Entsprechender Funktionsaufruf>)$
$CMS_SET(endTimer,#global.now.milliseconds)$Zeitmessung:$CMS_VALUE(endTimer-startTimer)$ms
Sie sollten mehrere Messungen durchführen, um aussagekräftige Werte zu bekommen.
Viele Grüsse aus Dortmund,
Holger Höbbel
Hallo Herr Höbbel,
ich hatte nach einem besseren Betreff überlegt, aber mir ist nichts eingefallen ...
Ja ich verwende ein ContentSelect, um die Daten aus der datenquelle zu holen. Das wird ja nach Abfrageergebnis zusammengebaut (ContentSelect als Script).
Und es stimmt, dass das ContentSelect nur einmal ausgeführt wird, das dauert je nach Umfang des Abfrageergebnisses von 250ms bis 1800ms. Auf den anderen Seiten dann um die 25ms.
Da "verbrate" ich irgendwo anders noch die Zeit und habe die falsche Stelle vermutet. Der neue Auftritt braucht fast das doppelte an Zeit für die Veröffentlichung braucht (etwa 3,5 Minuten).
Danke für die Hinweise (auf die Zeit hätte ich auch selber kommen können).
Viele Grüße aus DD
A. Vogt
Hallo Herr Vogt,
eine Alternative wäre evtl. ein SSI. Damit würden Sie bei der Generierung nur eine einzige Seite erzeugen und diese dann vom Webserver bei der Auslieferung includieren lassen. Die Rechenzeit lagern Sie dann auf den Webserver aus, was jedoch auch nicht ohne Nachteile ist.
Viele Grüße,
C. Klingbeil