Cache de pagini

Caching-ul de pagini se refera la memorarea in cache a continutului unei intregi pagini. Caching-ul de pagini poate aparea si in aplicatia server si in aplicatia client.

De exemplu, prin alegerea unui header de pagina corespunzator, browser-ul clientului poate memora in cache pagina pentru o perioada limitata de timp.

Aplicatia web insasi poate memora continutului paginii in cache si in aceasta subsectiune ne referim la aceasta tehnica.

Caching-ul de pagini poate fi considerat un caz special al caching-ului de fragmente. Continutul unei pagini este de obicei generat prin aplicarea unui layout la un view. De aceea, caching-ul nu va functiona daca apelam in interiorul layout-ului beginCache() si endCache(). Cauza este ca layout-ul este aplicat in interiorul metodei CController::render() DUPA ce view-ul a fost evaluat.

Pentru a memora in cache o pagina intreaga, ar trebui sa sarim peste action-ul care genereaza continutul paginii. Putem folosi COutputCache ca filtru al respectivului action pentru a ne atinge scopul. Urmatorul cod arata cum sa configuram filtrul cache:

public function filters()
{
    return array(
        array(
            'system.web.widgets.COutputCache',
            'duration'=>100,
            'varyByParam'=>array('id'),
        ),
    );
}

Configuratia filtrului de mai sus face ca filtrul sa fie aplicat tuturor action-urilor din controller. Putem preciza caror action-uri le va fi aplicat filtrul. Putem folosi in acest scop operatorul +. Mai multe detalii pot fi gasite in sectiunea despre filtre.

Sfat: Putem folosi clasa COutputCache ca filtru pentru ca este derivata din clasa CFilterWidget, ceea ce inseamna ca este atat filtru cat si widget. De fapt, un widget functioneaza foarte asemanator cu un filtru: un widget incepe inainte de evaluarea continutului HTML care ii urmeaza, si apoi widget-ul se termina dupa ce continutul HTML a fost evaluat.

$Id: caching.page.txt 162 2008-11-05 12:44:08Z weizhuo $

Be the first person to leave a comment

Please to leave your comment.