Caching

Mit Caching (sinngem.: Zwischenspeicherung) kann man die Performance einer Webanwendung auf günstige und wirkungsvolle Weise erhöhen. Speichert man relativ statische Daten im Cache und liefert sie bei Anfragen direkt von dort zurück, spart man sich die Zeit, diese Daten erneut aufzubereiten.

In Yii steht dafür eine eigene Cachekomponente in der Anwendung zur Verfügung. Man kann diese Komponente z.B. für den Einsatz mit zwei Memcacheservern konfigurieren:

array(
    ......
    'components'=>array(
        ......
        'cache'=>array(
            'class'=>'system.caching.CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40),
            ),
        ),
    ),
);

Aus der Anwendung heraus wird dann über Yii::app()->cache auf diese Komponente zugegriffen.

Yii bietet verschiedene Cachekomponenten, um Cachedaten auf unterschiedlichsten Medien zu speichern. Die CMemCache-Komponente zum Beispiel, kapselt die memcache-Erweiterung von PHP um Daten direkt im Speicher zu cachen. Die CDbCache-Komponente speichert gecachte Daten in einer Datenbank. Folgende Cachekomponenten stehen zur Verfügung:

Tipp: Da alle Cachekomponenten von der selben Basisklasse CCache abgeleitet sind, kann auf eine andere Cache-Art umgestellt werden, ohne den Code anpassen zu müssen.

Caching kann auf unterschiedlichen Ebenen eingesetzt werden. Auf unterster Ebene verwendet man den Cache zum Speichern von Daten, wie z.B. einer Variable. Man spricht dann auch von Datencaching (engl.: data caching). Geht man eine Ebene höher, könnte man auch ganze Fragmente bzw. Seitenabschnitte, die von einem Viewteil generiert wurden, im Cache ablegen. Im Maximalfall wird gleich eine ganze Seite im Cache gespeichert und bei Anfragen direkt von dort ausgeliefert.

In den nächsten Abschnitten gehen wir auf jeden dieser Fälle näher ein.

Hinweis: Per Definition ist ein Cache ein vergängliches Speichermedium. Es ist also niemals garantiert, dass ein bestimmter Wert im Cache existiert - selbst wenn dieser niemals verfallen sollte. Sie sollten daher keine beständige Daten im Cache speichern (also z.B. keine Sessiondaten).

$Id: caching.overview.txt 2890 2011-01-18 15:58:34Z qiang.xue $