Traduction du billet
'New PEAR proposal: HTTP_Cache' de php-tools:
Stéphane vient de proposer une nouvelle librairie à inclure dans PEAR: HTTP_Cache. Cette librairie aide dans la gestion de requêtes GET conditionelles, et permet de limiter le trafic de vos sites en n'envoyant le corps de la requête qu'avec la première requête - pour toutes les autres, HTTP_Cache envoie un entête 304 (non modifié). C'est utile surtout si une page générée via PHP est très demandée mais ne change pas beaucoup, car le navigateur ne va pas la mettre dans son cache par défaut.
Pour utiliser HTTP_Cache dans votre site, c'est très simple vu que la librairie s'occupe de tout, et peut même utiliser le tampon d'affichage. Pour l'inclure dans votre application, il suffit de quelques lignes de code:
<?php
require_once 'HTTP/Cache.php';
$cache = &new HTTP_Cache(array('auto' => true));
echo "Vous pouvez maintenant envoyer des données au navigateur";
?>
HTTP_Cache va générer un identifiant unique pour le navigateur actuel et envoyer les entêtes suivants:
Cache-Control: must-revalidate
Etag: e33b111743ff17c7829cd6bdad6815cb
À la prochaine requête, le navigateur va renvoyer le Etag au serveur, et HTTP_Cache va comparer cet Etag avec celui généré sur le serveur. Si les deux correspondent, un entête 304 sera envoyé au navigateur (aucune donnée ne sera envoyée):
HTTP/1.x 304 Not Modified
Le seul désavantage est que HTTP_Cache a besoin de générer une somme MD5 du contenu à envoyer au navigateur, ce qui peut ralentir légèrement votre apllication selon les cas. Mais d'utiliser le cache peut augmenter les performances globales du serveur comme il n'a plus autant de données à envoyer que sans le cache.
Autrement, il est aussi possible de dire à HTTP_Cache quel identifiant utiliser - dans ce cas, la librairie n'a plus besoin de le générer elle-même par somme MD5. C'est surtout utile si vous sutilisez déjà un système de cache côté serveur qui a déjà généré un identifiant. Dans ce cas, vous pouvez vérifier si le cache du navigateur est valide pour ne pas avoir à charger la page:
<?php
require_once 'HTTP/Cache.php';
$cache = &new HTTP_Cache();
// création de l'identifiant
$etag = 'hfhfhjfjddhfhjdshdddkjd33';
$cache->setEtag($etag);
// le cache du navigateur n'est pas valide
if (!$cache->isValid()) {
// création du contenu
$html = 'Plein de HTML partout, partout tout plein....';
// donner le contenu à HTTP_Cache
$cache->setBody($html);
}
// envoyer les entêtes
$result = $cache->send();
?>
Si cette librairie vous intéresse, vous pouvez consulter la
proposition dans PEAR ou
télécharger la première version par notre site.