Retour sur le forum PHP 2024
Revivez les moments forts du Forum PHP 2024 avec l'AFUP ! Découvrez l'avenir du PHP et les innovations qui feront la différence.
Vous avez certainement entendu parler du fameux cache, que ce soit sur votre téléphone mobile ou sur votre ordinateur, mais est-ce que vous savez à quoi cela correspond ?
Clarifions en détail ce sujet :
Le cache tout comme la RAM est une mémoire, contribuant à optimiser la performance du CPU.
Son rôle est d’enregistrer temporairement les données, informations ou programmes utilisés pour lui permettre d’y accéder plus facilement ultérieurement.
Lorsque le processeur traite des données, il va d’abord requêter le cache pour savoir s'il contient les informations qu’ils recherchent.
Cela lui permet dans un premier temps, d’éviter d’aller les trouver sur un serveur plus volumineux.
Pour simplifier, la mémoire cache sert à stocker de manière temporaire certaines informations utilisées régulièrement par le processeur. Cela permet d’obtenir plus rapidement ces données lors d’un accès ultérieur et permet d'optimiser l'efficacité du processeur.
Dans les préférences d’un navigateur comme Firefox, se trouve un bouton "cache", celui-ci permet de stocker des ressources statiques que vous avez vu sur un site (juste pour vous), comme des images, des fichiers CSS, etc.
Le cache navigateur permet de charger la page quasi instantanément dans 2 cas :
Ce type de cache fonctionne exactement comme le cache navigateur mais sur une plus grande échelle. Il est doté d’une mémoire de masse qui peut régulièrement stocker et mettre à jour les pages web les plus consultées par un grand nombre d’utilisateurs.
En effet, les grandes entreprises et les fournisseurs d’accès internet servent des centaines d’internautes de la même manière, ces mandataires le mettent souvent dans leur pare-feu ou comme une disposition autonome. Les caches mandataires se trouvent donc sur le réseau.
On se trouve dans un type de cache partagé, qui concerne plusieurs utilisateurs, et qui permet de réduire l'attente et le trafic des réseaux, vu que les représentations populaires sont réutilisées plusieurs fois.
Appelés aussi des serveurs cache inverses ou cache auxiliaires. Ces caches sont aussi des intermédiaires, mais au lieu d'être déployés par les administrateurs de réseaux pour économiser la bande passante, ils le sont généralement par les webmasters eux-mêmes afin de rendre leurs sites plus évolutifs, plus fiables et plus performants.
Les demandes peuvent être acheminées vers le cache de la passerelle à travers plusieurs manières, mais on utilise une certaine forme d'équilibrage de charge afin qu'une ou plusieurs d'entre elles apparaissent aux clients en tant que serveur original.
Un réseau de diffusion de contenu (CDN) distribue des caches de passerelle sur Internet (ou une partie de celui-ci) et vend les caches aux sites Web intéressés. Speedera et Akamai sont des exemples de réseaux de diffusion de contenu.
Les caches fonctionnent suivant des règles précises, elles sont déterminées par 2 parties : Les protocoles HTTP 1.0 & 1.1, et l’administrateur du cache.
Le jeu de règles est le suivant :
Dans l’entête d’une page <head>, les auteurs HTML peuvent placer des balises meta qui servent à indiquer si le contenu est cachable ou non cachable, et qui permet de donner une date d’expiration.
Ces balises sont faciles à mettre en place, mais elles ne sont prises en compte que par quelques caches de navigateurs qui lisent le code HTML.
Ci-dessous la liste des en-têtes efficaces :
Expires indique aux caches le temps d’expiration d’une représentation, pour qu’après ce temps passé, le cache vérifie auprès du serveur si les ressources ont changé.
Les en-têtes Expires sont reconnues par la majorité des caches, et conviennent particulièrement aux ressources de type images statiques (barres et boutons de navigation) qui ne changent pas beaucoup.
Néanmoins, elles sont aussi utiles pour les pages qui changent régulièrement. Dans ce cas, il faudra paramétrer une date d’expiration plus courte pour que les données se rafraichissent.
Il est à noter que la valeur qui doit figurer dans une en-tête Expires doit être une date HTTP.
Exemple : Tue, 14 Jan 2023 18:13:34 GMT
Ces en-têtes ont été introduites par HTTP 1.1 pour donner plus de contrôle sur le contenu.
Elles sont les suivantes :
Exemple : Cache-Control: max-age=3600, must-revalidate
Lorsqu’on effectue une modification aux données, le modèle d’expiration n’est pas suffisant. Et c’est dans ce cas que le modèle de validation intervient avec l'en-tête “Last-Modified”, qui continue de stocker les réponses en demandant à l’application si ces dernières sont toujours valides ou doivent être régénérées (avec l'en-tête If-Modified-since).
Donc la validation permet de communiquer le fait qu'une représentation a changé. Ce qui évite au cache de devoir télécharger les ressources entières.
Il existe un autre type de validateur appelé ETag qui a été introduit par HTTP 1.1 ; où à chaque fois que la représentation change, le serveur génère un identificateur unique ETag et le contrôle, pour que quand l’attribut If-Non-Match apparaît, la représentation reste la même.
Ces 2 validateurs concernent uniquement les représentations statiques.