Anleitung:
Zu cachende Bereiche werden im Modul durch <!cache=
<lifetime> cache!> markiert. Diese Tags sind wie <?php und ?> zu behandeln, also anstelle dessen das man
einsetzt, verwendet man
Der Unterschied liegt nun darin wie nun der Code in der con_code gespeichert wird...
Normaler php Code wird as is in der con code gesichert... also
gecachter code speichert die Ausgabe des echo Befehls, den Orginal-Code, eine If-Abfrage um die Gültigkeit zu überprüfen und einen Funktionsaufruf um den evtl. neu generierten Code wieder abspeichern zu können.
Code: Alles auswählen
<?php
if ((time() > 483475987+600) and (!$edit)):
ob_start();
echo "was auch immer";
$cached_code=ob_get_flush();
conUpdateCacheCode(15,1,1,154887,$cached_code);
else:?>
<!--cached code id 154887>
was auch immer
<!--cached code id 154887>
<?endif;?>
Für
<lifetime> setzt man einfach die gewünschte Lebenszeit in Sekunden ein. Ein Wert von 0 führt dazu, dass nicht gecached wird. Ein negativer Wert ergibt einen unendlich gültigen Cache, entspricht damit exakt der Funktionsweise der Simple Cache Engine.
Wird =
<lifetime> weggelassen, wird eine unendliche Lebenszeit angenommen.
Das Ganze wurde so implementiert das auch innerhalb von dieser gecachten Code-passagen CMS_VALUE verwendet werden kann...
Die grundsätzliche Vorgangsweise wie code nun in der con_code erzeugt wird sieht jetzt wie folgt aus
1. innerhalb der konfigurierten module wird zu allererst CMS_VALUE durch den konfigurationswert ersetzt...
2. anschließend werden die module in dem entsprechenden layout eingebettet
3. (neu) gefundene <!cache cache!> passagen innerhalb des gesamten bisherigen erzeugen codes werden evaluiert
4. anschließend werden die cms_type platzhalter ersetzt
5. code wird in der con_code hinterlegt
6. gesamter code wird in der front_content bei aufruf evaluiert
<!cache=
<lifetime> cache!> funktioniert sowohl im layout als auch in modulen...
eine kombination aus beiden also normaler php code und gecachten code ist ebenso möglich...
damit ein großteil der bisherigen module ebenso als gecachte version lauffähig sind wird ein grundstock an contenido variablen zur verfügung gestellt....
welche da wären:
$idcat, $idart, $idcatart, $idartlang, $lang, $client, $cfg, $cfgClient, $edit, $sess, $perm, $auth, $encoding und eine eigene $db instanz...
die als gecachte version ausgeführten module können ebenso eine variable $cache abfragen, welche auf true gesetzt ist...
gewisse kleinigkeiten bei dieser arbeitsweise mit dem code werden nicht (ohne weiteres) funktionieren... zb auswertung von $_GET,$_POST,$_REQUEST werten...
Bekannte Fehler und Einschränkungen:
- Es stehen nicht alle Contenido-Variablen zur Verfügung
- Es stehen keine $_GET, $_POST, $_REQUEST - Variablen zur Verfügung, bzw. nicht die des aktuellen Aufrufs. (Sondern die des Aufrufs als der Cache das letzte Mal abgelaufen war.)
- Bedenkt immer das gecachete Blöcke zu einer völlig anderen Zeit evaluiert werden, als der Rest des Codes. Der Code im <!cache=<lifetime> cache!>-Block muss also für sich alleine Sinn ergeben.
- Eine Übergabe von Variablen zwischen dem gecachten und anderen Code-Teilen ist nicht möglich.
- (gelöst =>)Laufen mehrere Cache-Blöcke in einem Artikel gleichzeitig ab, wird nur der letzte Cache-Block erneut gecached. Die andren Blöcke werden aber korrekt ausgeführt, nur werden die Ergebnisse nicht gecached
- (gelöst =>)Laufen mehrere Cache-Blöcke in einem Artikel gleichzeitig ab, werden überflüssige SQL-Abfragen an die Datenbank gesendet (=>Performance-Problem)
- (gelöst=>by emergence)Es kann zu Problemen mit Modulen kommen, die den Wert der Variablen $code ändern. Liegen diese Änderungen in einem gecachten Block werden diese unter Umständen in die con_Code geschrieben. (Was bei einer Standardinstallation nicht passieren kann) z.B. das Modul Snippets
- (gelöst =>)Innerhalb von Cache-Blöcken können keine <?php und ?> Tags verwendet werden. Dies kann zu Problemen bei Verwendung von <!cache=<lifetime> cache!> in Layouts führen, wenn im Cache-Block Container liegen die PHP-Code enthalten.
- (gelöst =>)Aufgrund eines Bugs in PHP-Preg-Ausdrücken kann es bei großen Cache-Blöcken zu Apache-Abstürzen kommen. Workaround: mehrere kleine Blöcke einsetzen.
- Beim Einsatz im Layout muss mindestens 1 HTML-Tag zwischen <!cache und dem nachfolgenden <container /> liegen, sonst wird der Container nicht als solcher erkannt.
- Ein weiteres Problem, dass mir gerade auffällt, ist, dass die Listen in diesem Forum keine Bullet-Points haben, und so nur schwer als Listen zu erkennen sind.