Cachning

Cachning är ett kostnadseffektivt sätt att förbättra prestanda hos en webbapplikation. Genom att lagra relativt statiska data i cacheminne och leverera dem därifrån på begäran, sparas den tid som skulle gått åt till generering av data.

Användande av cacheminne i Yii innebär i huvudsak konfigurering och åtkomst till en cache-applikationskomponent. Följande applikationskonfiguration specificerar en cachekomponent som använder memcache med två cacheservrar.

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),
            ),
        ),
    ),
);

När applikationen är igång kan cachekomponenten nås via Yii::app()->cache.

Yii erbjuder olika cachekomponenter som kan lagra cachedata på olika media. Till exempel, CMemCache-komponenten kapslar in PHP:s memcache-tillägg och använder minne som medium för cachelagring; CApcCache-komponenten kapslar in PHP:s APC-tillägg; och CDbCache-komponenten cachelagrar data i en databas. Här följer en sammanfattning av de tillgängliga cachekomponenterna:

Tips: Eftersom alla dessa cachekomponenter utvidgar samma basklass CCache, kan man byta till en annan typ av cache utan att modifiera kod som använder sig av cache.

Cachning kan användas på varierande nivåer. På den lägsta nivån kan vi använda cache för att lagra ett enstaka stycke data, som en variabel. Detta benämns data-cachning. På nästa nivå, kan ett sidfragment cachelagras, dvs innehåll som delar av ett vyskript genererat. På den högsta nivån kan vi cachelagra en hel sida och leverera den från cache efter behov.

I några av de följande underavsnitten kommer utförligt att behandlas hur cachning används på respektive nivåer.

Märk: Cache är per definition ett flyktigt lagringsmedium. Det garanterar inte existensen av cachelagrat data, även sådant vars giltighetstid inte löpt ut. Av denna anledning, använd inte cache för icke-flyktig lagring (t.ex. använd inte cache till att lagra sessionsdata).

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