Kioob
dimanche 21 septembre 2008 à 20:43
Hello,
j'ai du mal à comprendre exactement ce qui pose soucis dans tes questions, mais je vais tenter de ne pas trop répondre à coté de la plaque

Déjà il faut bien faire la distinction entre les différents cache. Coté PHP les 3 principaux qu'on croise sont :
- le cache du navigateur (géré à coup de "ETag", de "LastModified" et de "Expires") : cela permet de faire quelques économies de ressource coté serveur et améliore grandement la "sensation de vitesse" pour l'internaute. La page n'est pas re-téléchargée, et généralement pas réinterprétée non plus. Dans le cas de Firefox il peut même être possible de ne pas avoir à ré-exécuter le JS. D'un point de vue utilisateur, c'est pour moi le cache le plus efficace.
- le cache de données (qui consiste à stocker le résultat d'un traitement sous forme "serialisée" ; typiquement une grosse requête). L'avantage c'est qu'il est très souple/modulaire et peut être intégré à tous les types de page de manière plus ou moins complexe. En solution toute prête, il me semble que "Cache_Lite" fait ça.
- le cache de rendu (c'est à dire le code HTML généré par les scripts). C'est de loin le moins souple mais le plus efficace : souvent il se base uniquement sur l'URL pour générer une "clé" et durant N secondes le contenu d'un fichier statique sera directement retourné à l'utilisateur plutôt que d'exécuter les traitements habituels. En solution toute prête, il y aurait JPCache qui faisait ça, et sa soit disant "évolution" QuickCache.
Généralement les caches de rendus se chargent aussi de gérer le cache du navigateur, mais ça n'a rien d'obligatoire. Sur mes sites par exemple je gère systématiquement le cache du navigateur, et sur certains sites/pages j'utilise un cache de données.... mais jamais de cache de rendu par exemple.
Donc toi, tu cherches quelle solution au juste ?
Pour ta première question, il s'agit de gérer correctement le cache navigateur.... et pour les scripts PHP, ça ne se fait pas de manière automatique. C'est donc à tes scripts de prendre ça en charge. Dès lors que tu as la date de dernière modification c'est très simple à mettre en place (ça se fait en 3/4 lignes de code) mais le plus difficile est d'obtenir cette info justement.
Les caches de rendus se basent alors sur l'heure de création du fichier de cache pour gérer le LastModified... et parfois sur le contenu de ce fichier de cache pour générer un checksum et ainsi gérer l'entête ETag.
Pour ce qui est de la compression, elle n'intervient aucunement là dedans... Ormis éventuellement JPCache qui stockait la version compressée de la page afin de ne pas avoir à recompresser systématiquement. Perso je préfère laisser cette tâche à la compression interne de PHP (zlib.output_compression) qui fait ça très bien et sans devoir attendre la fin de la page.
Pour ce qui est des "exceptions", c'est faisable dans tous les cas.