Si la gestion de cache web est pour vous une notion vague je vous invite à lire cette excellente documentation de Mark Nottingham en français.

J'ai appliqué les techniques d'optimisation un site web pour les caches web dont je parlais dans un billet précédent à mon propre blog propulsé par Dotclear 2.

Dans mon cas l'hébergement est réalisé sur un serveur Debian Lenny avec les briques suivante

  • Apache 2.2.9
  • Php5 5.2.11
  • Mysql 5.0.75

Dotclear 2 déjà optimisé

DC2 comporte déjà des optimisations pour la mise en cache des pages générées par l'application. Si vous étudier les header HTTP d'un dotclear fraichement installé avec un outil comme firebug pour firefox ou les outils développeur web de Safari ou Chrome vous pourrez en faire la constatation.

En effet DC2 utilise le framework clearbricks qui comporte quelque fonction, entre autre dans la lib php suivante

/dotclear/inc/clearbricks/common/lib.http.php

Les lignes, 207 a 210 de ce fichier génère les headers HTTP d'instruction de mise en cache. Personnellement souhaitant maitrisé les hearder depuis mon vhost apache j'ai mis en commentaire la ligne 209.

207 # Common headers list
208 $headers[] = 'Last-Modified: '.gmdate('D, d M Y H:i:s',$ts).' GMT';
209 # $headers[] = 'Cache-Control: must-revalidate, max-age='.abs((integer) self::$cache_max_age);
210 $headers[] = 'Pragma:';

Vhost apache, interdir les .htacess

Comme je l'expliquais dans un commentaire htaccess est un tueur de performance pour le site à forte audience. Ceci n'est pas le cas de mon blog, dommage, mais je garde la bonne pratique de bloquer l'utilisation des htaccess dans mon vhost avec la directive AllowOverride None.

<Directory /home/karles/public_html/>
           Options FollowSymLinks
            AllowOverride None
        </Directory>

mod_deflate, régime pour les fichiers texte

Le mod_deflate est le module apache apportant les fonctions de compression des fichiers avant leur distribution. L'installer est des plus facile

a2enmod deflate
/etc/init.d/apache stop
/etc/init.d/apache start

Sous apache2 l'antique Mod_gzip à fait la place au mod_deflate bien moins compliqué dans sa configuration. J'ai fais le choix de compresser les fichier qui sont sous forme de texte. C'est à dire les fichiers xml, css et javascript.

<IfModule mod_deflate.c>
            <Location />
                AddOutputFilterByType DEFLATE text/xml
                AddOutputFilterByType DEFLATE text/css
                AddOutputFilterByType DEFLATE text/javascript
                AddOutputFilterByType DEFLATE text/html
                AddOutputFilterByType DEFLATE text/plain
                AddOutputFilterByType DEFLATE application/xml
                AddOutputFilterByType DEFLATE application/xhtml+xml
                AddOutputFilterByType DEFLATE application/rss+xml
                AddOutputFilterByType DEFLATE application/javascript
                AddOutputFilterByType DEFLATE application/x-javascript
 
                SetOutputFilter DEFLATE
 
                # Make sure proxies don't deliver the wrong content
                Header append Vary User-Agent env=!dont-vary
            </Location>
        </IfModule

Attention, l'utilisation du mod_deflate avec la ligne d'instruction Header append Vary User-Agent env=!dont-vary impose d'avoir le module mod_headers et le module mod_setenvif d'activé.

mod_expires, mise en cache

le mod_expires est tout aussi facile à installé que le mod_deflate. J'ai fait le choix de tout mettre en cache au minimum 30 secondes, Le contenue html restera valide deux minutes avant qu'une nouvelle interrogation de mon serveur soit nécessaire. La mise en page avec les fichiers javascript et css j'autorise une semaine de mise en cache. Quand aux images, plus lourde et moins volatile c'est carrément un mois de validité que je souhaite.

<IfModule mod_expires.c>
                ExpiresActive on
                ExpiresDefault "access plus 30 seconds"
                ExpiresByType text/html "access plus 120 seconds"
                ExpiresByType text/css "access 1 weeks"
                ExpiresByType text/javascript "access 1 weeks"
                ExpiresByType application/x-javascript "access 1 weeks"
                ExpiresByType application/javascript "access 1 weeks"
                ExpiresByType image/gif "access 1 months"
                ExpiresByType image/jpeg "access 1 months"
                ExpiresByType image/png "access 1 months"
        </IfModule>

Conclusion

Si vous ajouter à ces technique celle d'optimisation des images pour l'accélération d'un site web vous allez sensiblement accélérer l'affichage de votre blog et par la même son référencement.

Vous pouvez également consulté la documentation du chaosklub en trois partie (1 2 3 ) qui s'attaque au même chantier mais de façon moins performante à mes yeux car utilisant les .htaccess et des scripts php de configuration des headers. Cette approche est nécessaire dans le cas ou vous le maitrisé par votre hébergement.