当我注意到jQuery的HTTP browser caching:Media Temple ProCDN backed library不遵循http://code.jquery.com/jquery-1.7.1.min.js时,我一直在阅读caching best practices并在我自己的网站上玩它。谷歌。
相当多(我认为),有两种类型的浏览器端缓存:
Expires和Cache-Control:max-age。
这些被认为是无条件应用的“强大缓存标头”;也就是说,一旦设置并下载资源,浏览器就不会发出任何资源的GET请求,直到有效期或最长期限为止。达到了“
Last-Modified和ETag
这两者都提供了各种缓存,但Last-Modified遵循特定于浏览器的启发式方法,并且ETag需要更多的HTTP请求,尽管在返回304 Not-Modified时它们可以很轻。无论如何,这两者都可能涉及更多的GET请求。
静态jQuery版本永远不会更改。所以我认为应该有一个远期的Expires标题。更重要的是,这样一个可以在许多站点上使用的资产理想情况下不需要新的GET请求(即使它对于检查ETag的有效性而言很小)。
似乎只使用了ETag而没有Cache-Control或Expires标头:
Status: HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: application/x-javascript; charset=utf-8
Date: Mon, 05 Dec 2011 19:45:57 GMT
ETag: "9e69008-16eac-5177b900"
Last-Modified: Tue, 22 Nov 2011 02:11:16 GMT
Server: ECS (fra/D59E)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 93868
Connection: close
来自:http://web-sniffer.net/?url=http%3A%2F%2Fcode.jquery.com%2Fjquery-1.7.1.min.js
那么有没有理由不设置远期的Expires标头或使用Cache-Control来实现这样的情况?我在这里误读了什么吗?或者这是jQuery人员的错误配置?
答案 0 :(得分:2)
实际上,我们现在还没有使用proCDN - 我们使用的是那个不让我们自定义的旧版本:/但是!好消息!他们用一些新东西把它们挂起来,procdn(它有一些统计/跟踪的东西也会有点整洁)和一些更快的盒子所以我们应该能够让我们的缓存更好 - 因为你是对的,它是现在不是很好。此外,我们不能做任何自定义标题或类型或任何东西,这有时很好。
听起来你已经对此进行了大量的研究 - 如果你想提供你的帮助来解决其中一些设置的问题,那么有时会弹出#jquery-dev(对我来说是相同的用户名),因为你似乎知识渊博,有兴趣提供帮助:)