Was ist das Caching Framework?

Bei dem Caching Framework handelt es sich um eine einheitliche API, um Daten zwischenzuspeichern. Dabei ist es völlig egal, wie (Frontend) und wo (Backend) die Daten abgespeichert werden. Jeder Extensionentwickler hat die Möglichkeit einen Cache zu erstellen und eine Standardkonfiguration mitzuliefern. Schlussendlich obliegt es aber dem Administrator/Webseitenbetreiber, ob er diese Konfiguration übernimmt, oder auf ein anderes Speichersystem wie APCu umstellt. Die Programmierung der Extension muss auf Grund der einheitlichen Methodennamen der API nicht angepasst werden.

Das TYPO3 Caching Framework wurde im Rahmen von Flow programmiert und in TYPO3 4.3 gebackportet. Damals musste es noch über das Installtoll explizit aktiviert werden. Mit TYPO3 4.6 wurde das Caching Framework zum Standard und die Option im Installtool entfernt. Seit dem wurde das Caching Framework immer weiter entwickelt und neue Backends hinzugefügt.

Wie richte ich einen eigenen Cache ein?

Folgende 3 Zeilen in der ext_localconf.php erzeugen einen Cache mit dem Namen cache_what_ever. Als Standard wird das VariableFrontend und das Typo3DatabaseBackend verwendet.

if (!is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_what_ever'])) {
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_what_ever'] = array();
}

Wie ändere ich das Frontend?

Hier geht es nicht nur um euren eigenen Cache. Ich habt die Möglichkeit das Frontend eines jeden Caches zu ändern.

Beachtet bitte, dass eine Umstellung vom VariableFrontend auf das StringFrontend zu erheblichen Problemen führen kann, da das StringFrontend keine Arrays und Objekte aufnehmen kann. Eine Umstellung von StringFrontend zu VariableFrontend würde hingegen funktionieren. Jedoch büßt ihr dabei ein paar Microsekunden wegen der Serialisierung der Daten ein.

if (!is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_what_ever'])) {
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_what_ever'] = array();
}
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_what_ever']['frontend'] = \TYPO3\CMS\Core\Cache\Frontend\StringFrontend::class;

Wie überschreibe ich das Backend?

Im Gegensatz zum Frontend ist das Backend etwas unempfindlicher, was Änderungen anbelangt. Klar, ein Backend, das zum Laden von PHP Dateien verwendet wird (require_once) kann nicht auf das ApcuBackend oder das TransientMemoryBackend umgebogen werden.

Im Folgenden setzen wir das Backend des page Caches von TYPO3 auf das SimpleFileBackend.

Die Optionen eines Backends müssen nicht immer die Gleichen sein. Deshalb lösche ich die Optionen des alten Backends in der 2ten Zeile. Durch den Wechsel des Backends werden die Datanbanktabellen cf_cache_pages und cf_cache_pages_tags obsolet und können mittels des Installtools gefahrlos gelöscht werden.

$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = \TYPO3\CMS\Core\Cache\Backend\SimpleFileBackend::class;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['options'] = array();

Cache Konfiguration von typo3lexikon.de

Für meine Webseite habe ich zu Testzwecken alle TYPO3 Core Caches auf andere Backends umgestellt. Die entsprechende Konfiguration habe ich in der AdditionalConfiguration.php vorgenommen.

<?php
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_reflection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\ApcuBackend';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_datamapfactory_datamap']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\ApcuBackend';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_rootline']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\ApcuBackend';

$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_hash']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\SimpleFileBackend';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\SimpleFileBackend';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['options'] = array();
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pagesection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\SimpleFileBackend';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pagesection']['options'] = array();