Le Web n'est pas patient.

Vous est-il arrivé de naviguer sur un site Internet et de refermer la page avant même qu'elle ait eu le temps de s'afficher complètement ? Ce geste anodin qui consiste à revenir sur Google car le site visité est trop lent, est devenu un réflexe pour les internautes. Poussés par les performances des connexions et l'optimisation des navigateurs, les internautes ont perdu la patience acquise durant des années, rythmées par la douce mélodie de nos modems 56k. Aujourd'hui, tout doit être instantané. Au fil des clics, les pages doivent s'afficher sans laisser le temps aux visiteurs de réfléchir ni de choisir un site concurrent.
 
Parallèlement, le marketing viral a rendu imprévisibles les fortes augmentations de trafic. Qu'y a-t-il de plus agaçant qu'un serveur qui tombe quand un lien se transmet sur Twitter ? Autant de visiteurs potentiels qui ne reviendront pas car le site ne s'est pas chargé assez vite la première fois et ne le partageront pas non plus.
 
Un site Internet se doit donc d'être rapide et robuste. Quoi de plus simple ? Le problème est que bon nombre de sites Web sont conçus sur des CMS comme Drupal ou Wordpress par des équipes peu habituées à mettre en place des structures vraiment performantes. Il existe de nombreux articles décrivant comment améliorer les performances d'un site, mais peu d'entre eux expliquent que seul un système de cache optimisé rendra possible la maîtrise des performances d'une plateforme Web.
 

Mais qu'est-ce que le cache ?

Le cache est un mot qui revient très souvent dans le monde de la création des sites Internet. Wikipedia propose cette définition :
 
Une mémoire cache ou antémémoire est, en informatique, une mémoire qui enregistre temporairement des copies de données provenant d'une autre source de données comme les mémoires, afin de diminuer le temps d'accès (en lecture ou en écriture) d'un matériel informatique (en général, un processeur) à ces données.
 
Ce fameux cache se retrouve à de nombreux endroits. Load Balancer, Navigateur, CMS, Base de données ont tous la possibilité d'améliorer les performances d'un site et de le rendre plus robuste. Ils stockent certains éléments des pages afin de ne pas avoir à refaire des calculs à chaque appel. Drupal 7 possède, par exemple, en système de cache intégré permettant d'accélérer le chargement des pages de façon remarquable. Mais cela ne change pas le fond du problème, plus il y a de visites, plus le site doit afficher de pages, et plus il doit afficher de pages, plus le serveur est sollicité. Tous les systèmes de cache internes au CMS sollicitent aussi le serveur pour l'affichage des pages en cache ce qui les rend inefficaces à haut trafic. Il faut donc trouver un moyen de casser le rapport entre le nombre de visites et les appels au serveur, autrement nommés "Hits".
 
C'est le rôle du load balancer (Comprenez un Reverse Proxy Cache Load balancer). Ce répartiteur de charge, distinct de celui qui héberge le site, est responsable de gérer le nombre de hits sur ce dernier. Bien configuré, il est capable de répondre à des règles afin de réduire le nombre de combinaisons possibles entre visiteurs et pages à afficher. Un exemple simple : le texte de la page des mentions légales de votre site est le même pour tous les visiteurs ? Il est donc inutile de redemander cette page au serveur à chaque fois qu'un utilisateur veut y accéder. Pourtant, bon nombre de sites Internet affichent le nom et le prénom de l'utilisateur connecté sur cette page. Si l'on regarde le code HTML de la page, il y a donc une version de cette page pour chaque visiteur. Le load balancer est donc obligé d'interroger le serveur à chaque visite, multipliant ainsi le nombre de hits.
 

Adieu la personnalisation des pages ?

Non, bien entendu. La personnalisation des pages d'un site Internet permet de rassurer le visiteur et de lui apporter du contenu pertinent, il n'est donc pas possible de rendre les pages génériques à tous les visiteurs. Pour cela, il est nécessaire de mettre en place des règles visant à maîtriser l'affichage du contenu des pages en fonction des groupes de visiteurs. Ces règles appliquées à votre site constituent ce qu'on appelle une politique de cache. 
 

Mais que comporte cette politique de cache ?

La première chose à prendre en compte pour la définition ce cette politique de cache est de bien connaître le contenu de votre site. Pour cela, le premier exercice consiste à comparer le code HTML de votre page d'accueil sur deux ordinateurs différents. Si le code est parfaitement identique, c'est un très bon début. Si ce n'est pas le cas, vous devez isoler les parties du code qui diffèrent et comprendre d'où viennent leurs différences. Une fois toutes les différences isolées, vous pourrez regrouper les personnalisations par groupe. Prenons un exemple : votre site géo localise ses utilisateurs par ville sur la page d'accueil. En France, vous aurez près de 38 000 versions différentes de cette page. Ces affichages spécifiques empêchent donc de réaliser des groupes de visiteurs efficaces. Vous devez refaire l'exercice sur toutes les pages de votre site susceptibles de recevoir du trafic.
 
Quand tous les affichages spécifiques ont été identifiés, la technique la plus simple pour les faire disparaître du HTML et de les charger en AJAX. Ce mécanisme, simple à mettre en place, permet de charger dans un premier temps le HTML commun aux pages qui est en cache, puis, dans un deuxième temps, les affichages spécifiques. Il est essentiel que l'intégralité des différences entre deux versions d'une même page soit traitée. Il est donc maintenant possible de grouper les visiteurs pour chaque page. Il existe d'autres méthodes plus complexes pour la gestion des affichages spécifiques comme les ESI. Le choix entre l'enrichissement Ajax et les ESI est avant tout un choix lié au référencement, car les enrichissement Ajax n'étant pas présent dans le HTML, il ne sont pas pris en compte par les moteurs de recherche.
 
La deuxième partie de la politique de cache consiste à définir les règles que va utiliser le Load Balancer pour mettre en cache les pages. Ces règles se basent sur les URI du site Internet. C'est pour cette raison qu'il est nécessaire de penser à la mise en place ducache dès la conception de votre site. Vous allez donc grouper les pages par URI et indiquer au Load Balancer quelles règles appliquer à chaque groupe. Sur Drupal, l'utilisation des "patterns" du module Pathauto facilite ce regroupement. 
 
Prenons l'exemple des ajouts d'actualités sur votre site. Ces actualités ne sont pas souvent mises à jour. Vous avez donc la possibilité de mettre en cache ce type de page pour plusieurs heures. Il suffit donc que toutes les actualités possèdent une partie de l'URI en commun, et vous pourrez indiquer au Load Balancer de garder en cache ces pages pour un certain nombre d'heures. La seule contrainte imposée par ce système est que les modifications effectuées au contenu mettront plusieurs heures à apparaître au public. 
 
En groupant les pages de même type et en indiquant au Load Balancer le temps de mise en cache, vous allez petit à petit définir votre politique de cache.
 

Trop de cache tue le cache

Une des difficultés liée au cache est de choisir le bon temps de mise en cache. Ce temps est bien souvent sous-estimé, et la robustesse d'un site à un trafic élevé passe par une bonne maîtrise de ces temps de cache. Il ne faut cependant pas tomber dans les excès, et ne pas minimiser les possibilités d'effets pervers. Il ne faut jamais oublier que le Load Balancer est externe à votre site et qu'une mauvaise configuration rendra inutilisable un backoffice ou un système de commentaires. Méfiez-vous donc des règles de cache appliquées à un groupe de pages non restrictif, comme par exemple, la règle www.votresite.com/* qui va mettre en cache toutes les pages de votre site sans exception. Une mauvaise configuration va donc provoquer des comportements non cohérents.
 

La maîtrise du cache fera la différence

Trop peu de sites ont pris conscience de l'importance d'avoir une politique de cache en adéquation avec leurs ambitions de trafic et de performances. La multiplication des CMS, comme Drupal ou Magento, renforcent la nécessité de prendre en compte cette problématique dès la conception du site Internet. Beaucoup de sites victimes de leur succès l'ont appris à leurs dépens. Enfin, bien au delà de la sécurité que cela va apporter à votre site, son accélération aura de nombreux effets positifs sur le comportement d’achat de vos visiteurs ou sur le référencement. Alors pensez cash et vous ne le regretterez pas !
 
Nicolas Marsaud avec PROceau
Co-gérant de Feel & Clic.