Pour réduire les requêtes http et faciliter le processus de déploiement des fichiers js/css, j'ai configuré mon application php pour concaténer les fichiers js et css. Tous les fichiers inclus sont séquentiellement combinés dans un fichier volumineux en utilisant des codes à 2 lettres pour chaque fichier (par exemple, home.js code = "AA"). Pour générer les noms, je combine tous les codes dans l'ordre où ils sont chargés, ajoutez un trait de soulignement, puis l'horodatage (ex "AABACE_12345678.js"). Ensuite, dans le répertoire où ils sont servis, j'utilise une directive apache dans htaccess pour analyser les fichiers avec php (sing sethandler) afin que je puisse contrôler les en-têtes et renvoyer 301 en-têtes non modifiés.Mise en cache dans JS/CSS
Malheureusement cela ne fonctionne pas ... J'ai testé la merde avec le panneau Net de firebug et liveHTTPHeaders. La page charge le fichier à chaque fois, même si elle doit l'avoir dans le cache. Voici un exemple des en-têtes de réponse l'un des retours de fichiers:
Date Wed, 14 Jul 2010 17:00:28 GMT
Cache-Control private
Content-Encoding gzip
Etag "4b4a6d50f9acf924b9dce14e415f5c78"
Expires Wed, 28 Jul 2010 17:00:28 GMT
Vary Accept-Encoding
X-Powered-By PHP/5.2.6
Last-Modified Wed, 14 Jul 2010 16:59:35 GMT
Content-Length 39305
Content-Type text/css
Note: J'ai omis certains en-têtes non liés à la mise en cache, comme keepAlive, serveur, etc
Je tiens également à noter que je m gzipping conditionnellement le contenu, d'où l'en-tête privé de contrôle de cache. Qu'est-ce que j'oublie ici? Le contenu doit être mis en cache en raison de l'en-tête expires. Je génère l'etag à partir d'un md5 a du nom de fichier + timestamp, de sorte que ne change jamais pour le fichier. Dernière modification ne change jamais, ne change jamais .... Expires
[EDIT]
Ainsi, après d'autres tests, mes fichiers CSS sont mises en cache se, mais mon javascript est pas. Si j'ai deux fichiers, avec des en-têtes de cache IDENTICAL (etag, expires, last-modified, cache-control) mais la seule chose différente est le type de contenu (un "text/css" un "text/javascript"), SEULEMENT le css est mis en cache ... frustrant
Je suppose avec horodatage que vous voulez dire le dernier horodatage de filemtime(), et non l'horodatage actuel? – Wrikken
@Wrikken - Correct. Chaque fois qu'un des fichiers js/css inclus est mis à jour, il en crée un nouveau avec l'horodatage en cours dans le nom. Mais l'horodatage utilisé pour générer les en-têtes Etag/Last-modified est équivalent à ce qui serait retourné par filetime(). – eCaroth
OK, mais juste pour être super-sûr: l'horodatage du fichier requis reste le même, et vous vous souvenez d'une manière ou d'une autre de l'horodatage automatiquement en indiquant le fichier à charger? Si oui, avez-vous une url pour nous de tester? Vous ne seriez pas le premier à être contrecarré par «Je développe ce site web afin de ne rien mettre en cache» réglage personnel dans son navigateur. – Wrikken