Pārskatot vecos PHP skriptus atradu vienu, kas varētu noderēt tiem, kuri vēlas paātrināt savu Web lapu ielādi. Ideja pavisam vienkārša – izmantojam kešošanu. Tātad – verot vaļā Web lapu tiek pārbaudīts vai attiecīgā lapa ir iekešota. Ja nav iekešota, tad Web lapas saturs tiek ierakstīts failā (tiek iekešots). Ja lapa ir iekešota un lapas vecums nav lielāks par noteikto, tad vairs netiek lapas saturs ģenerēts ar ierasto PHP skriptu, bet paņemts no iepriekš saglabātā faila.

Iespējams, ka šādas funkcionalitātes skriptu var uzrakstīt arī optimālāk, bet šis variants ir pārbaudīts un šķiet, ka tam pat ir jāstrādā. Ja kāds pamana kļūdas – ziņojiet.

Ja gadījumā nolemjat skriptu izmantot īpaši pievērsiet uzmanību $cache_path mainīgajam. Dotajā gadījumā skripts bija paredzēts, lai kešotu pašu pirmo lapu tāpēc ceļš varēja būt arī šāds. Bet ja gribat kešot kaut ko dziļākās direktorijās (piemēram, yyyyyy.com/aaa/bb.php), tad direktoriju būtu jāizmanto citu, jo pretējā gadījumā arī /aaa/ būs nepieciešamība pēc direktorijas /cache/.

// Web lapu kešošana
$cache_expire = 600; // Sekundes pēc kurām kešs jāatjauno
$cache_path = 'cache/'; // Ceļš uz direktoriju kur tiks glabātas iekešotās lapas

if (is_callable('file_put_contents', false) == false)
{ // PHP4 gadījumā izveidojam funkciju file_put_contents
function file_put_contents($file, $str)
{
$f = fopen($file, 'w');
fwrite($f, $str);
fclose($f);
}
}

// ŠEIT liekam skriptus kuriem ir jāizpildās pirms lapa tiek atgriezta
// piemēram lietotāju logošana utt.

$key = md5($_SERVER['QUERY_STRING']);

if (is_file($cache_path.$key) && filemtime($cache_path.$key) > time() - $cache_expire)
{ // Ja pieprasītā lapa ir iekešota un tās vecums nav pārāk liels
// nolasam un atgriežam apmeklētājam lapas saturu. Pēc tam skripts beidz savu darbību
echo file_get_contents($cache_path.$key);
die();
}
// Savukārt ja nebija derīgas lapas kešā..
ob_start();

// Šeit jābūt tai skripta daļai, kura uzģenerē lapu. Tās saturs netiks uzreiz izvadīts
// apmeklētājam, bet ievietots buferī.

$tmp = ob_get_contents(); // Paņemam bufera saturu
file_put_contents($cache_path.$key, $tmp); // Ierakstam failā
ob_end_flush(); // Parādam saturu apmeklētājam

?>
Aizmirsu vēl piebilst, ka šāda kešošana der tikai gadījumos, kad lapas saturs nav dinamiski jāveido katram lietotājam unikāls.

Citi raksti par šo tēmu

  • Nav citu rakstu par šo tēmu.