Des pistes pour optimiser les performances d'accès d'un site web

Les difficultés rencontrées avec un site à fort trafic (E-monsite en est un bon exemple) sont compliquées à gérer. Il y a d'un côté la partie matérielle qui doit être suffisante, et d'un autre côté la partie développement qui doit être optimale. C'est ce second point que je vais aborder dans ce billet qui regroupe toutes les techniques et astuces que j'utilise afin de soulager la charge du serveur.

  • Bien penser la structure de sa base de données avant le développement afin de réduire au maximum le nombre de requêtes SQL dans le développement (par exemple, ne pas hésiter à créer une colonne contenant le nombre de messages postés par un utilisateur - qui sera remis à jour à chaque message qu'il postera - plutôt que de faire un mysql_num_rows à chaque affichage de ce nombre).
  • Mettre en cache tout ou une partie du contenu (stocker la page dans un fichier html et l'afficher s'il existe ou sinon affichage de la page php et génération du cache).
  • Mettre en cache des variables avec les fonctions serialize et unserialize. Cela permet par exemple de mettre en cache le résultat d'un mysql_fetch_array assez lourd appelé sur chaque page (comme des variables sur l'utilisateur ou le contenu de menus...). J'y reviendrais plus en détail dans un prochain billet.
  • Optimiser les requêtes SQL : utiliser les jointures (SELECT sur plusieurs table ayant des champs en communs) et ne pas faire de SELECT * (select sur tous les champs) mais lister les champs utilisés (SELECT id,login,nom FROM ...).
  • Mettre des index intelligents sur les tables SQL. Les index permettent un gain de temps d'accès énorme. Il faut les placer sur les colonnes utilisées dans la clause WHERE.
  • Compresser vos pages web, fichiers CSS et javascripts à l'aide de la fonction gzip de php. Vous trouverez sur ce site une classe complète pour compresser vos pages. Cela peut paraître idiot à l'heure du haut débit : il faut optimiser le poids des images car des images lourdes ralentissent malgré tout le chargement de la page.
  • Vérifier qu'un script, notamment de régie publicitaire, ne ralentit pas l'affichage de la page. Cela arrive fréquemment et certaines régies sont championnes dans ce domaine !

N'hésitez pas à compléter si j'ai oublié des choses ;)