Saturday January 21, 2012
<nerd mode ON>
Encore un post un peu geek...
En tombant par hasard sur l'extension Firefox "Firebug" via l'outil Google pour tester la rapidite de son site, eh bien j'ai remarque que le mien n'etait pas terrible. Probleme: la cache du browser client, que je n'utilisais pas. J'avais deja vu ca dans mes logs: des centaines de requetes qui se terminent en 304 ("no change") alors qu'elles n'auraient meme pas du etre faites. Mais ces outils m'ont fait comprendre le probleme et sa solution. Comme d'hab, c'est HTACCESS qui vien a la rescousse.
Donc voila, si vous voulez ameliorer la vitesse de votre site, il suffit de quelques parametres a ajouter dans votre .htaccess:
# Turn on Expires and set default expires to 0
ExpiresActive On
ExpiresDefault A0
# Set caching on media and other slow changing files to 1 month
<filesMatch "\.(gif|jp?eg|png|css)$">
ExpiresDefault A2419200
Header set Cache-Control "public"
</filesMatch>
# Force no caching for dynamic files
<filesMatch "\.(php|html|js|xml)$">
ExpiresDefault A0
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
</filesMatch>
Le seul petit hic c'est que pas mal d'images de mon site sont autogenerees, et viennent donc de scripts PHP. Du coup il faut par exemple preciser ceci en plus:
# myimage.png needs special rules:
<files "myimage.php">
ExpiresDefault A2419200
Header set Cache-Control "public"
</files>
Et c'est tout! Firebug et l'outil "Pagespeed" de Google permettent de visualiser les headers HTTP de retour et de verifier que tout va bien. Lors des verifications ulterieures de votre site vous devrez sans doute utiliser pas mal de fois le bouton "clear cache" sinon certains fichiers dans votre cache seront utilises et vous vous demanderez pourquoi votre contenu n'est pas actualise.
Dernier petit truc pour lequel il faut faire attention: les headers peuvent etre changes dans le script PHP lui meme via la fonction Headers() mais ces derniers seront concatenes avec les headers venant des regles presentes dans votre .htaccess. Ca devient donc vite foireux. Mieux vaut tout controler en un endroit (htaccess).
<nerd mode OFF>
|