Mammouth du PHP |
505 Messages
05 juin 2007, 09:12
Attention c'est long...
Le cache des navigateur est une longue histoire qu'Eric & Cyril Pierre (coucou) ne peuvent pas traiter completement dans un livre généraliste. Il faudrait un livre dédié si on voulait pouvoir en couvrir tous les aspects. Néanmoins, dans les parties qu'ils abordent, dit toi bien que rien n'est inutile.
On peut déjà rapeller plusieurs choses, cela ne coute rien.
- Le cache se paramètre coté client, on n'a donc pas coté serveur la posibilité de savoir comment est paramétré un client, ni de modifier ce paramétrage. C'est particulièrement vrai avec IE qui propose dans les options 4 modes de gestion du cache...
- les algorythme s diffère d'une browser a l'autre et notement les heuristique d'expiration.
Par exemple, pour une page dont ont a pas donnée de durée de peremption (elle n'expire jamais). Le navigateurs va quand meme aller vérifier de temps en temps qu'elle na pas changée, mais la fréquence à laquelle il va le faire dépend de son heuristique.
* Pour un navigateur, une page qui n'a pas été modifiée depuis un mois (durée exemple) va etre considérée comme stable et il ira de moins en moins souvent vérifier si n'est n'a pas changée, en partant du principe que plus elle reste stable longtemps, plus elle a de chance d'etre statique.
* Pour un autre navigateur, l'approche est oposée et il vas partir du principe que si une page n'a pas évoluée depuis longtemps, la probabilité qu'elle est changée est de plus en plus forte.
- Hormis les approches avec des dates, il y a d'autre moyen de savoir qu'un page a évoluée, c'est le principe des etags. On n'utilise plus la date de derniere modification mais un code arbitraire qui permet est affecté suivant un algorithme au choix, souvent un cheksum quelquonque sur le contenu de la page, ce qui fait que si la page change, le checksum change et donc le etag avec. C'est dailleurs la meilleur aproche, bien plus simple et plus fiable que le principe de last-modified. etc.... Helas, (bah oui, c'était trop beau), IE gère bien les etags tant qu'il n'y a pas de compression html, mais ne les renvoie pas au serveur si la page qui lui a été servie était compressé, et donc, le système d'étag n'est pas valable avec IE si on fait de la compression, on est donc obligé d'utiliser a nouveau des last-modified. Le gros problème des last-modified, c'est que si ton site est très fréquenté et a plusieurs frontaux pour faire face à la charge, chaque frontal vas avoir une date de last modified disincte, et comme la répartion de charge entre les frontaux est souvent faites via le round-robin dns, a chaque chargement, tu risques de charger la page sur un frontal distinct, et donc d'avoir un last modified différends.
Voila juste quelques petits exemples des problèmes de gestion de cache . Quand je te dit qu'on pourrait en faire un livre dédié...
Dans ton cas, assure toi que ton navigateur est bien paramétré pour utiliser le cache.
Le 304 (not modified) est renvoyé au navigateur quand le navigateur redemande une page au serveur en lui indiquand
je veux telle page, avec tel etag, tel last modified. Le serveur vas constuire la page et comparer le etag ou comparer la date de last-modified. Si il y a eu modification entre temps, il renvoie la totalité du contenue de la page. Si aucune modification n'a eu lieu, il ne retourne qu'un header avec code 304 et le browser comprend que la page n'ayant pas évolué, il peux utiliser celle qui se trouve dans son cache.
Attention, si tu fais f5, tu peux obtenir des des 304, mais si tu fais ctrl-f5, tu forces le rechargement de la page en ignorant date et etags.