Add to Google Reader or Homepage Prihlásiť sa k odberu RSS

| Rubrika Php / mysql

Cachovanie do HTML súboru

Každý projekt, ktorému sa podarí rozbehnúť, sa časom začne potýkať s problematikou rýchlosti. Množstvo návštev, množstvo SQL dotazov, veľký traffic… Problémom s rýchlosťou sa dá vyhnúť vhodne navrhnutým cachovaním sql dotazov. Napriek tomu, že MySQL databáza ma v sebe implementované akési cachovanie, reálny výkon je minimálne pochybný. Preto sa väčšinou využívajú iné metódy. Jednou z nich je cachovať výstup vygenerovaný PHPčkom priamo do HTML súboru, ktorý potom includujeme namiesto opätovného vykonania SQL dotazu.
Cachovanie celého výstupu do HTML / TXT súboru používam napríklad v prípade vygenerovania veľkého stromu kategórií, ktorý je v databáze uložený klasickým štýlom child_id /parent_id a teda na výber je nutná rekurzívna funkcia, ktorá je všetko len nie ekonomická. Celý strom si preto vygenerujem len raz a uložím do HTML súboru, ktorý sa zmaže až pokiaľ nastane nejaká zmena v týchto kategóriách.

// pokiaľ existuje daný cache súbor, tak ho includneme
 
if(file_exists('cache/nazov_cache_suboru.html')) {
   include_once 'cache/nazov_cache_suboru.html';
 
// pokiaľ súbor neexistuje (teda ešte nikto stránku
// nenavštívil a cache sa nevygenerovala), nastávaju čary
 
} else {
 
   ob_start();
 
   /*
   Tu príde akýkoľvek kus kódu, ktorý chcem zacachovať..
   Rekurívna funkcia, zložitý sql dotaz, čokoľvek...
   */
 
   $output = ob_get_contents();
   ob_end_flush();
 
   $fp = fopen('cache/nazov_cache_suboru.html', 'x');
   fwrite($fp, $output);
   fclose($fp);
 
}

Základom takéhoto cachovania sú funkcie output bufferingu, ktoré akýkoľvek výstup po zapnutí funkcie pomocou príkazu ob_start() uložia do bufferu, ktorého obsah je potom možné vložiť do premennej a zároveň vypísať na obrazovku. Príkazom ob_get_contents() získame obsah bufferu a vložíme do premennej $output. Funkcia ob_end_flush() zobrazí obsah bufferu na obrazovku a potom ho vyprázdni.
Premennú $output, v ktorej je teraz uložený výstup už len zapíšeme do nejakého cachovacieho súboru, ktorý potom zobrazujeme namiesto opätovného vykonania SQL dotazu.

Tomáš Mašek

Naspäť naspäť Pridať komentár k článku prispieť do diskusie [0]

Vyhľadávanie

v názvoch článkov v textoch článkov

Pridať komentár

Koľko je na ruke prstov?

RSS