2011-08-13 3 views
0

Il y a quelques jours, j'ai commencé à utiliser la mise en cache du navigateur, pour mettre en cache les fichiers js et css et les garder "Non Modifié", et cela fonctionne très bien.la mise en cache du navigateur ou la mise en cache du disque?

Maintenant je veux appliquer de la même manière sur plusieurs pages du système. Par exemple, j'ai cette page qui répertorie les "utilisateurs" de la base de données, et je veux mettre en cache la page pour ne pas surcharger la base de données avec des requêtes.

Ma question est la suivante: est-ce une bonne méthode (la page exécute-t-elle toujours la requête db en mémoire cache?) Ou devrais-je utiliser la mise en cache disque ou 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

caching n'est pas recommandé sur les pages dynamiques (pour des raisons évidentes). –

+0

Sur le système sur lequel je travaille, l'annulation du cache et le rappel des résultats de la base de données dépendent d'un autre facteur. donc je peux le garder en cache et l'annuler si nécessaire. – Dewan159

Répondre

2

Un exemple simple de mise en cache de disque, Ive a utilisé cette méthode lors de la mise en cache Contant dynamique que le changement dosent souvent comme stats, menus, rssfeeds, pages ect ..

<?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; 
} 
?> 
Questions connexes