Javascript 强制文件缓存

THE*_*ING 0 html javascript caching

我的网站每天有 20 万活跃用户

我不久前读过一篇关于强制 javascript 和 PHP 缓存文件的文章。我以前从未需要缓存我的文件,但现在我正在处理传入和传出服务器的大量数据,我想将其中一些数据存储在客户端本地。

我不知道是否有更好的方法来做到这一点,但本质上,我正在考虑使用编写一个库

  • HTML5 本地存储(如果可用)/清单
  • 如果可用,则使用 java 的后备
  • 如果可用的话,可以使用 silverlight 进行后备。

我对此非常感兴趣,最好是 JavaScript。

我想知道如何使用 JavaScript 缓存文件


在有人认为我正在重新发明轮子之前

示例)我有几个 Javascript 文件,如果更新这些文件,浏览器将不会重新加载脚本,因为它已被缓存。通过版本控制,我可以管理用户何时需要重新加载缓存的数据。

Igw*_*alu 5

请参阅HTTP 中的缓存。基本上,对于每个请求,您都应该cache-control在响应中指定标头字段,指示何时可以使用新内容。缓存控制头字段的正式定义如下:

Cache-Control 通用标头字段用于指定请求/响应链上的所有缓存机制必须遵守的指令。这些指令指定了旨在防止缓存对请求或响应产生不利干扰的行为。这些指令通常会覆盖默认的缓存算法。缓存指令是单向的,因为请求中指令的存在并不意味着响应中将给出相同的指令。

该字段通常按照以下方式指定

cache-control: private|public, max-age=[, no-cache]

民众

指示响应可以被任何缓存缓存,即使它通常是不可缓存的或仅在非共享缓存中可缓存的。(有关更多详细信息,另请参阅第 14.8 节“授权”。)

私人的

指示全部或部分响应消息适用于单个用户,并且不得由共享缓存进行缓存。这允许源服务器声明响应的指定部分仅适用于一个用户,并且不是对其他用户的请求的有效响应。私有(非共享)缓存可以缓存响应。注意:“私有”一词的这种用法仅控制可以缓存响应的位置,并不能确保消息内容的隐私。

无缓存

如果 no-cache 指令未指定字段名称,则在未成功与源服务器重新验证的情况下,缓存不得使用响应来满足后续请求。这允许源服务器阻止缓存,即使缓存已配置为向客户端请求返回过时的响应。如果 no-cache 指令确实指定了一个或多个字段名称,则缓存可以使用响应来满足后续请求,但须遵守缓存的任何其他限制。但是,如果没有成功地与源服务器进行重新验证,则不得在对后续请求的响应中发送指定的字段名称。这允许源服务器防止在响应中重复使用某些标头字段,同时仍然允许缓存响应的其余部分。

例如,cache-control: private, max-age=86400, no-cache指示客户端缓存响应并重复使用它,直到86400 (24 小时)过去。然而,在这段时间过去之前,情况可能会发生变化。no-cache指令每次都会导致重新验证。这就像浏览器每次都会询问我是否真的可以向您的用户展示缓存的内容?ETag标头一起,您将能够在之前缓存的内容过期之前向用户推送重要更改。

在重新验证期间,会将响应中存在的 Etag 与先前在同一资源请求中提供的 Etag 进行比较。如果它们相同,则可以保证资源没有改变,因此,缓存确实有效。否则,如果它们不同,则资源内容已更改,并且新内容将作为对用户的响应给出。

阅读有关 HTTP 缓存的更多信息:

  1. https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en#validating-cached-responses-with-etags
  2. http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/

同时请注意,应用程序缓存的使用主要适用于您希望向用户提供离线内容的情况。