Le status 304 devrait etre gere automatiquement pour toi, mais bon, je
ne connais pas ton environnement… Tu peux, dans certains cas,
vouloir ameliorer le mecanisme de cache, mais c’est pas un sujet
facile.
Extrait: “cache invalidation is one of the two hard things in computer
science. If you could somehow avoid expiring all the ‘stuff’ you’re
caching, your life would be much much easier.”
Je ne suis pas sur que l’on parle de la meme chose.
Il va falloir que tu nous decrives un peu plus en detail ton
environnement et ce que tu cherches a realiser.
La 1ere question que j’aurais: est-ce qu’il y a un probleme de
performance? tu l’as identifie et quantifie?
S’il n’y a pas de probleme, mais que tu veux faire au mieux… Le
mieux, c’est de rien faire!
S’il y a un pb de perf, commence a regarder du cote du caching dans
Rails: tu peux cacher des fragments, etc. Et les dernieres versions de
Rails ont meme une integration directe avec memcache.
Enfin, en general, tu veux que ton serveur reponde 304 pour des
resources qui changent peu (images, fichiers JS, etc.) Une page
entiere est en general compose de multiples morceaux et il est trop
difficile de savoir si qqchose a changer. A moins que tu aies des
pages statiques, mais la, t’as pas besoin de Rails: tu peux les servir
direct avec Apache…
Voila, si je suis completement a cote, decris nous ton environnement
plus en detail.
Depuis ce matin, je cherche en vain à faire fonctionner le revois du
status 304 (Not Modified) sur mon projet rails.
J’ai découvert cette méthode en visualisant un slide sur Memcached [1],
l’auteur procédait en comparant une chaine md5 avec le
header[‘If-None-Match’].
Après avoir testé de mon coté (sur Webrick en développement, et avec un
cluster mongrel en production), je n’ai toujours pas réussi à faire
fonctionner ce morceaux de code[2].
Rendering will automatically insert the etag header on 200 OK responses.
The etag is calculated using MD5 of the response body. If a request
comes in that has a matching etag, the response will be changed to
a 304 Not Modified and the response body will be set to an empty
string. No etag header will be inserted if it’s already set."
tu freezes rails dans vendor/rails et tu ouvres
actionpack-2.1.0/lib/action_controller/response.rb et dans la methode
handle_conditional_get! tu ajoutes:
puts non_de_variable_que_tu_veux_verifier
Tu verras la sortie dans ta console.
C’est cette methode qui gere le ETag et donc c’est la qui faut regarder.