[WordPress] Accélerez votre blog avec de meilleures règles de réécriture .htaccess

 

Ceux qui postent souvent sur Websourcing, s’en sont sans doute rendu compte, le site est un peu plus rapide depuis quelques jours. Je pense avoir localisé et corrigé la source du problème de lenteur lors de la soumission de commentaires (ou de billets côté administration).

Voila plusieurs jours que je travaille à améliorer la situation depuis le changement de design. Ce qui explique sans doute pourquoi les quelques ajustements graphiques proposés mettent du temps à venir.

Outre le problème de formulaire, j’ai mis du temps à trouver la bonne carburation avec W3 Total Cache. Et maintenant je cherche à optimiser encore un peu en grattant quelques millièmes de secondes à droite et à gauche.

optimisation performance site internet 500x333 [WordPress] Accélerez votre blog avec de meilleures règles de réécriture .htaccess

C’est ainsi que je suis tombé sur un thread intéressant à propos du code de réécriture d’url avec Apache dans le fichier .htaccess.

Il propose un nouveau code, qui semble être plus efficace que le code par défaut proposé par WordPress lors de l’installation.

This is a total replacement for the code supplied with WP as bounded by the “Begin WP” and “End WP” comments, and fixes several performance-affecting problems. Notably, the unnecessary and potentially-problematic container is completely removed, and code is added and re-structured to both prevent completely-unnecessary file- and directory- exists checks and to reduce the number of necessary -exists checks to one-half the original count (due to the way mod_rewrite behaves recursively in .htaccess context).

# BEGIN WordPress
#
RewriteEngine on
#
# RewriteBase / à ajuster
#
# si la requête est pour  "/" ou a déjà été réécrite par WP
RewriteCond $1 ^(index.php)?$ [OR]
# ou si la requête est pour une image, une CSS ou un JS
RewriteCond $1 .(gif|jpg|php|ico|css|js)$ [NC,OR]
# ou si l'url pointe vers un fichier existant
RewriteCond %{REQUEST_FILENAME} -f [OR]
# ou si l'url pointe vers un répertoire existant
RewriteCond %{REQUEST_FILENAME} -d
# alors on ne redirige pas vers WP
RewriteRule ^(.*)$ - [S=1]
# sinon, WP prend le contrôle et fait la redirection.
RewriteRule . /index.php [L]
#
# END wordpress

C’est typiquement ce que font les scripts de caching lorsqu’ils ajoutent du code dans le .htaccess. Ainsi, toutes les ressources statiques ne nécessitent pas l’intervention de WordPress pour être servies, ou au moins pour résoudre le chemin. De même, certaines vérifications inutiles ne sont plus appliquées.

De quoi gagner quelques précieux cycles et secondes. C’est Google qui va être content.

J’ai appliqué ces changements depuis avant-hier. Pour l’instant je n’ai pas d’erreur ou quoi que ce soit de négatif. Google Webmaster Tools me dira dans quelques jours si il y voit une amélioration.

Pour information, le code par défaut est le suivant :

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Des retours ? Des avis ? Des objections ? Ou des améliorations à proposer ?