Alors voici un petit mystère. Le javascript de Google Analytics se charge toujours du cache du navigateur sur F5 (dans Firefox). Je ne peux pas obtenir la même chose avec mes propres scripts.
Voici les en-têtes qui reviennent sur la demande initiale:
Pour http://google-analytics.com/ga.js
:
(Status-Line) HTTP/1.1 200 OK
Last-Modified Thu, 16 Feb 2012 00:48:45 GMT
X-Content-Type-Options nosniff, nosniff
Date Thu, 01 Mar 2012 20:58:10 GMT
Expires Thu, 01 Mar 2012 22:58:10 GMT
Content-Type text/javascript
Vary Accept-Encoding
Age 1326
Cache-Control max-age=7200, public
Server GFE/2.0
Transfer-Encoding chunked
Connection close
Pour http://my-site.example/myscript.js
:
(Status-Line) HTTP/1.1 200 OK
Server nginx
Date Thu, 01 Mar 2012 21:20:16 GMT
Content-Type application/javascript
Last-Modified Fri, 10 Feb 2012 17:50:27 GMT
Transfer-Encoding chunked
Connection keep-alive
Vary Accept-Encoding
Expires Thu, 01 Mar 2012 23:20:16 GMT
Cache-Control max-age=7200, public
Content-Encoding gzip
Quand j'appuie F5 sur ma page, ga.js
ne charge que du cache, mais myscript.js
est demandé et revient avec 304 Not Modified
. Quel est le combo magique ici? Et comment le charger à partir du cache sans déclencher le serveur jusqu'à son expiration?
EDIT
Je n'utilise PAS l'extrait de suivi des stocks de Google. J'utilise le code de chargement suivant:
<script src="/assets/js/vendor/LAB.min.js"></script>
<script>
$LAB
.script("//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js").wait()
.script("/assets/js/common.js?abc123").wait()
.script("/assets/js/home.js?abc123")
.script("/assets/js/stats.js?abc123");
</script>
stats.js
// Google Analytics
var _gaq = [["_setAccount", "UA-XXXXXXXX-1"], ["_trackPageview"]];
$LAB.script("//google-analytics.com/ga.js");
// WebSTAT
// ...
Sans voir les en-têtes lorsque vous avez rechargé la page, il est un peu difficile de vérifier certaines choses.
Une chose que j’ai remarquée, c’est que les dates/heures ne semblent pas correctes (même s’il s’agit peut-être simplement d’un artefact de la façon dont vous avez copié et collé votre question). La réponse du serveur de Google indique que la Date
est Thu, 01 Mar 2012 20:58:10 GMT
alors que votre js indique qu'il s'agit de Thu, 01 Mar 2012 21:20:16 GMT
. Si ma lecture de cette page est correcte, si votre serveur définit les en-têtes Date
futurs de votre machine personnelle, le current_age
calculé de votre la copie en cache sera toujours 0 (arrondi à un nombre négatif). Cela ferait en sorte que votre navigateur essaie de le valider en faisant un GET
conditionnel qui apparaît sous la forme 304 Not Modified
. Google peut aussi être légèrement désynchronisé avec votre ordinateur personnel, mais avec eux l'en-tête Age
est utilisé. Il est utilisé lorsqu'il est disponible si la valeur de l'âge calculée est inférieure à celle-ci.
Dans ce cas, assurez-vous que votre serveur Web (et votre ordinateur personnel) synchronisent leur heure sur un serveur de temps Internet. Cherchez un pool de serveurs de temps régional et synchronisez vos machines.
Le code de Google est appelé à partir de:
<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>
Si vous mettez votre code JS dans un fichier et que vous l'appelez de la même manière:
<script src="myscript.js" type="text/javascript"></script>
Votre script sera également mis en cache. Vérifiez le dernier paragraphe ici
Sur certains navigateurs et dans certaines circonstances (je n'ai pas examiné le code avec suffisamment de détails pour savoir lequel), LABjs utilise différentes méthodes pour précharger les scripts de même domaine et inter-domaines . Il est possible que la méthode de préchargement choisie par LABjs pour les scripts de même domaine soit sous-optimale sur votre navigateur.
Si tel est le cas, vous pouvez le signaler aux développeurs LABjs. (De préférence, après avoir cherché à vérifier qu'il ne s'agit pas déjà d'un problème connu.)