| 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äť
prispieť do diskusie [0]
Vyhľadávanie
Viac z rubriky
Ako ochrániť includované PHP súbory?
Automatické generovanie formulárov z MySQL
Automatický prevod texu na hyperlink
Cachovanie s pomocou funkcií serialize/unserialize
Čiernobiele obrázky v PHP
Dynamická tvorba URL
Fulltext ako názov stĺpca v tabuľke
Getcwd – Ako ľahko získať absolútnu cestu
Import z Excelu do MySQL databázy
Maximálny timeout vykonávania SQL skriptu
Microtime – rýchlosť načítania stránky
Odstránenie diakritiky v PHP pomocou iconv()
Overovanie a kontrola formulárov v PHP
Parsovanie XML súboru v PHP
PHP a zachytenie nedoručených mailov
PHP funkcia implode
Porovnávanie a dátovy typ DATE
Práca so súbormi pri zapnutom safe_mode
Prihlasovanie uživateľa prostredníctvom $_SESSION
Real-time kontrola e-mailovej adresy AJAX-om
Spracovanie dátového typu ENUM do HTML selectu
Strpos a offset – nájdenie výskytu znaku v reťazci
Tip: Generovanie PDF súborov
Tip: jednoduché šifrovanie a dešifrovanie v PHP
Tip: správne includovanie súborov
Ukladanie jazykových verzií statických textov
Veľmi jednoduchý návod na pekné URI
Vkladanie obrázkov do databázy
Výber záznamov začínajúcich číslom
Vyčistenie viacrozmerného poľa
Vyhľadávanie, pekné URI a diakritika
Vypísanie abecedy v PHP
Využívanie unikátnych kľúčov v MySQL databáze
Zaradenie jednej položky do viacerých kategórií
Zistenie hodnoty ďalšieho ID – autoincrement
Zložené MySQL dotazy – LEFT JOIN
Zvýrazňovanie syntaxe kódu – GeSHi
Pridať komentár



