Nous n’avons pas attendu les déclarations de Google sur l’impact du temps de chargement des pages dans le classement de ses résultats, pour nous atteler sérieusement à l’amélioration des performances d’affichages de sites web.
En effet Google n’a fait qu’officialiser une donnée aujourd’hui bien connue : l’internaute est tout sauf patient (3,5 secondes de temps d’attente est un maximum pour la moitié d’entre eux) et favoriser les sites rapides est un plus pour son confort.
Coté webmastering, l’optimisation du code (utilisation systématique du CSS) comme du poids des images a contribué significativement à la réduction du poids des pages.
Mais les vraies possibilités d’amélioration se trouvent du côté de l’hébergement, et sont loin de ne concerner que les simples performances serveur !
1) Optimisation du serveur web Apache
Le serveur Web Apache est bien connu pour sa stabilité et ses bonnes performances, ce qui en fait aujourd’hui l’alternative la plus utilisée du marché.
La configuration par défaut d’Apache
la configuration par défaut d’Apache permet d’obtenir des performances correctes tant que le nombre de visiteurs restent faible.
Dès les premières augmentations de trafic, il est en général nécessaire de se plonger dans sa documentation !
Plusieurs solutions s’offrent alors :
– Configurer le temps de connexion pour que celle-ci reste ouverte à la suite d’une requête, permettant ainsi d’être ré-utilisée sans faire une seconde ouverture si une requête du même type survient dans le laps de temps configuré.
– Optimiser la configuration du module multi-threads qui permet de répondre à plusieurs requêtes en simultanée.
Attention néanmoins, une configuration mal faite peut saturer rapidement le serveur !
Un thread prenant un espace mémoire, il faut trouver une adéquation entre le nombre de visiteurs simultanés et le nombre de thread réservés ! Trop de thread reservés utilisera trop de mémoire serveur par rapport aux besoins, trop peu ne permettra pas un affichage optimal du site face à un pic de trafic.
– Soulager le serveur Web en travaillant en amont, par la mise en place d’un logiciel proxy qui mettra en cache les pages web affichées par les visiteurs. La communication continue entre le serveur web et le proxy permet ainsi la création d’une page uniquement lorsque c’est nécessaire.
L’efficacité de cette procédure fait que des accélérateurs web comme Varnish (voir également notre article dédié à Varnish), bien que nécessitant quelques connaissances techniques pour être configurer correctement, sont aujourd’hui de plus en plus rependus.
Pour conclure, une bonne configuration Apache couplée avec l’utilisation d’un logiciel proxy améliore déjà drastiquement le temps de chargement de vos pages !
Mais ce ne sont pas les seules pistes…
2/ Optimisation de la base de données : mySQL
Parfois, les performance d’un serveur chutent de façon conséquente lorsque le nombre de visiteurs augmente, alors qu’Apache est correctement configuré et optimisé.
C’est alors du coté du serveur de base de données qu’il faut chercher !
En effet, il est malheureusement courant de faire chuter ses performances quand on ne prend pas garde à la façon dont sont construites les bases de données ou comment sont écrites les requêtes.
Il est par exemple très important de choisir judicieusement les champs index des tables, les SELECT sur ces champs seront bien plus rapides s’ils sont indexés.
Utiliser régulièrement la fonction EXPLAIN (à placer devant une requête) est aussi un bon début pour obtenir les informations utiles à l’optimisation de la requête.
Pour l’optimisation des paramètres du serveur lui-même, il existe un très bon script de diagnostique « tuning-primer.sh ».
Ce script contrôle un grand nombre de paramètres et propose les modifications qui permettent d’améliorer les performances du serveur.
Attention cependant lors de l’utilisation de ce script !
En effet, il reste un système d’analyse automatisé et dans certains cas il peut proposer des améliorations qui n’en sont pas réellement.
De plus, après chaque modification, il faut attendre au moins 24h avant de lancer de nouveau le script pour constater l’efficacité des optimisations.
Une excellente piste pour optimiser les performances de mySQL est d’utiliser les fonction de réplication, même si elle peut nécessiter de bonnes connaissances en administration système et plus particulièrement en configuration de mySQL.
La réplication consiste à utiliser plusieurs serveurs, avec un serveur maitre et un ou plusieurs serveurs esclaves.
L’accélération du système provient alors de la répartition de la charge entre le maître et les esclaves.
Le gain en performance se couple également d’une meilleure robustesse : en cas de problème sur le serveur maître, il est toujours possible d’utiliser un serveur esclave comme serveur de secours.
3/ Optimisation du code PHP
Optimiser son code PHP passe par l’identification des points les plus gourmands en ressource. A partir de là il s’agira de refondre le code (comme utiliser la fonction require() à la place de require_once() qui est plus lente, etc.), voire repenser son algorithme.
C’est une méthode efficace, bien que coûteuse en temps comme en compétences.
Une amélioration très efficace des performances est également obtenue en installant un cache de code pour PHP (comme APC, qui est sans doute le plus utilisé).
L’installation et la configuration d’un système de cache pour PHP permet de soulager le serveur web : lorsqu’une nouvelle page ayant du code PHP est demandée, le serveur web demande à PHP de compiler ce code et de lui renvoyer la version ‘html’ de cette page.
Le système de cache permet de stocker en mémoire le résultat de cette compilation et de renvoyer au serveur web la version mise en mémoire, sans pour autant avoir à refaire la compilation du code pour chaque requête.
4/ L’optimisation par les sous-domaines
Un moyen efficace d’améliorer le temps d’affichage est d’avoir recours aux sous domaines dits « static ».
Etape 1 : Dissocier les hébergements
Placer les images, scripts, gros fichiers, pages statiques… en résumé tous les contenus qui n’ont pas une fréquence de réactualisation inférieure au mois, dans un répertoire dédié.
Faire un pointage DNS sur ce répertoire pour que les fichiers soient accessibles via différents sous-domaines (exemple sd1.monsite.com/, sd2.monsite.com, etc., jusqu’à un maximum de 20).
S’assurer que les fichiers de ce répertoire ne soient accessibles que via ces sous-domaines.
Il suffit ensuite de répartir les éléments du répertoire entre les différents sous-domaines (sd1.monsite.com/photoexemple1.jpg, sd2.monsite.com/biganim.swf, etc.).
Etape 2 : Paramétrage du cache
Paramètrer la directive cache via le .htaccess ou le virtualhost pour chacun des sous domaines, afin d’augmenter la durée de vie des fichiers dans le dossier cache des navigateurs des
internautes.
Exemple :
ExpiresActive On
ExpiresByType image/gif « access plus 1 month »
ExpiresByType image/jpeg « access plus 1 month »
ExpiresByType image/png « access plus 1 month »
ExpiresByType text/css « access plus 1 week »
ExpiresByType text/javascript « access plus 1 week »
ExpiresByType application/javascript « access plus 1 week »
ExpiresByType application/x-javascript « access plus 1 week »
ExpiresByType image/x-icon « access plus 1 year »
Les gains obtenus :
1/ Le cache est maintenant activé, les clients du site font beaucoup plus d’appels au cache pour les fichiers médias « type image, swf », le délai de chargement de CHAQUE page qu’il visite est donc optimisé.
Le gain est proportionnel au poids des fichiers médias ainsi que leur nombre, ce qui peut s’avérer considérable (plus de 50%) car le poids des fichiers médias est en général très supérieur au poids des autres fichiers (notamment pour les boutiques E-commerce).
2/ De plus, si ces fichiers ne sont pas encore dans le cache, le navigateur peut exécuter un chargement en parallèle des fichiers (1 par sous domaine), au lieu de le faire l’un après l’autre. Ainsi, avant même la mise en cache, chaque page qu’il visite est chargé beaucoup plus rapidement.
5/ Optimisation ‘Off site’
Pour un site international, une solution envisageable est de répartir le stockage des fichiers constituant son site en plusieurs zones géographiques, afin de réduire le temps de chargement. Ainsi avec ce système, un utilisateur recevra les données issues du serveur le plus proche de chez lui.
On appelle ce système un CDN pour « Content Delivery Networks ». Pour en savoir plus à ce sujet, vous pouvez vous reporter à notre billet CDN, principe et fonctionnement.