Asi niekedy začiatkom tohto roku som kompletne prekódoval moju homepage. Znovu som použil PHP framework Qcodo, avšak novšiu a robustnejšiu verziu a ako som zistil až keď bol web nahraný na server, tak len samotná inicializácia frameworku trvala 0,3 sekundy. Niet sa čomu čudovať, je to starý kamarátov server s 430 MHz CPU.
Aj vďaka tomu, že len inicializácia frameworku zaberala 0,3 sekundy vygenerovanie niektorých stránok trvalo až 0,7 sekúnd, čo je celkom otravné a tak som sa rozhodol vyriešiť to. Ako najreálnejšia možnosť mi prišlo cachovanie vygenerovaných stránok, ešte pred inicializáciou Qcodo frameworku.
Z webu som vyhodil zobrazovanie času za aký bola stránka vygenerovaná, pretože s cachovaním by to nemalo zmysel a napísal som si triedu pre cachovanie.
MyCache.class.php:
class MyCache {
/* sem sa budú ukladať cache súbory */
public static $CacheDir = './cache/';
/*
funkcia GetCache() zobrazí nacachovanú stránku a vráti true, alebo zapne
output buffering ak cache stránky neexistuje a vráti false
*/
public static function GetCache() {
$f = MyCache::$CacheDir . str_replace('/', 'x', $_SERVER["REQUEST_URI"]);
if(is_readable($f)) {
$MTime = filemtime($f);
if(time() - $MTime < 604800) {
readfile($f);
return true;
}
}
ob_start();
return false;
}
/* funkcia StopCache() vypne output buffering a uloží cache stránky do súboru */
public static function StopCache() {
$output = ob_get_contents();
$f = MyCache::$CacheDir . str_replace('/', 'x', $_SERVER["REQUEST_URI"]);
if(!file_exists($f) || is_writable($f)) {
$fh = fopen($f, 'w');
fwrite($fh, $output);
fclose($fh);
}
}
}
?>
A použitie v PHP kóde danej stránky je nasledovné:
include('MyCache.class.php');
/* ak cache existuje tak sa zobrazí a skript sa ukončí */
if(MyCache::GetCache()) {
exit();
}
/*
Tu je všetok kód potrebný na vygenerovanie stránky.
*/
MyCache::StopCache();
?>
Ako vidíte, tak použitie triedy MyCache je veľmi jednoduché. Trieda sa sama stará o to kam sa súbor uloží a názov cache súboru sa generuje automaticky z URI stránky. Trieda nemá ošetrené zmeny stránok a o toto sa treba postarať manuálne. Napríklad pri pridávaní novinky, alebo príspevku do boardu sa o vymazanie cache stará skript pracujúci s novinkami/príspevkami.
Tento spôsob cachovania je vhodný len pre stránky s takmer statickým obsahom, presne ako je moja homepage a slúži len na cachovanie celých stránok. V mojom prípade sa rýchlosť načítania zmenila z 0,7 sekúnd na okamžite ;). Ak by ste chceli cachovať len časti stránok, tak si môžete triedu upraviť, alebo si prečítajte článok o cachovaní do súboru na phpblog.sk.
Pridaj komentár