кэширование в браузере или на диске? - PullRequest
0 голосов
/ 13 августа 2011

Всего несколько дней назад я начал использовать кэширование в браузере, чтобы кэшировать файлы js и css и сохранять его "Не измененным", и он работает очень хорошо.

Теперь я хочу применить один и тот же способ на многих страницах системы. Например, у меня есть эта страница, на которой перечислены «пользователи» из базы данных, и я хочу кэшировать страницу, чтобы не перегружать базу данных запросами.

Мой вопрос: это даже хороший метод (страница все еще выполняет запрос db при кэшировании?) Или мне следует обратиться к дисковому кэшированию или memcached?

header("HTTP/1.1 304 Not Modified");
header("Expires: ".gmdate("D, d M Y H:i:s", time()+(60*86400))." GMT");
header("Cache-Control: must-revalidate");
mysql_query(" SELECT * FROM `users` ");
// list all users 

1 Ответ

2 голосов
/ 13 августа 2011

Простой пример кэширования диска, я использовал этот метод при кэшировании динамических констант, которые часто изменяются, например, статистика, меню, RSS-каналы, страницы и т. Д.

<?php 
$cacheTime=3600; /*1hour*/

if(file_exists('./cache/'.sha1('users').'.php') && $_SESSION['user_status']!=true){
    $FileCreationTime = filectime('./cache/'.sha1('users').'.php');
    /* Calculate file age in seconds*/
    $FileAge = time() - $FileCreationTime;
    /*1h cache*/
    if ($FileAge > ($cacheTime)){unlink('./cache/'.sha1('users').'.php');header('Location: '.$_SERVER['REQUEST_URI']);die();}
    include("./cache/".sha1('users').".php");
    /*Cache is there and not older then 1hour so echo the cache*/
    echo base64_decode($cache);
}else{
    /*************************************************************/
    //Cache is NOT there or user logged in or older then 1hour so regenerate content

    //Do Content and store in $return variable
    $return='';


    $result = mysql_query(" SELECT * FROM `users` ");
    while($row=mysql_fetch_assoc($result)){
        $return .='<ul>'.$row['user'].'</ul>';
        ...
    }
    ...
    ...
    $return .='bla bla';
    /*************************************************************/

    /*Check if not logged in else save*/
    if($_SESSION['user_status']!=true){
        $cache_file_encoded = base64_encode($return);
        $cache_file = <<<CACHE
<?php 
/**
* Cached for:Users Page [{$_SERVER["HTTP_HOST"]}{$_SERVER['REQUEST_URI']}] Base64
*/  
 \$cache ="$cache_file_encoded"; ?>
CACHE;
        file_put_contents('./cache/'.sha1('users').'.php',$cache_file);
}
echo $return;
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...