如何处理浏览器缓存?

时间:2009-07-13 17:17:20

标签: javascript css browser caching

您在获取Web应用程序的缓存部分方面有什么诀窍?

使到期日期过长,我们会有很多陈旧的缓存,太短,我们冒着服务器因不必要的请求而超载的风险。

如何确保所有更改都会刷新所有缓存?

如何将SVN修订版嵌入代码/网址?

并排多个版本真的有助于解决版本不匹配问题吗?

3 个答案:

答案 0 :(得分:2)

查看minify项目。它是用PHP编写的,但您可以将它用作任何语言的蓝图。

主要特点:

  • 要合并的配置文件&将几个js或css文件缩小为一个
  • 始终使用配置组中上次修改文件的上次修改日期作为URL参数

示例资源可能看起来像

<script type="text/javascript" src="/min/g=js1&1248185458"></script>

将在您的配置中获取“js1”组javascript文件,版本号为“1248185458”,这实际上只是转换为纪元时间的最后修改日期。

当您在生产服务器上放置更新的js文件时,它们将有一个新的修改日期自动成为新的版本号 - 没有过时的缓存,没有手动版本控制

这是一个非常酷的项目,有一些关于优化和缓存的经过深思熟虑的想法。我稍微修改了这个过程,将YUI compressor插入到构建过程中。您可以通过修改服务器的标题herehere来阻止上次修改后的来自浏览器,从而进一步优化它。

答案 1 :(得分:1)

我认为你在js css文件上放置版本号是正确的。您可能希望使用构建工具将所有这些组合在一起,例如http://ant.apache.org/http://nant.sourceforge.net/

答案 2 :(得分:1)

处理这个问题的几种方法:

根据使用版本#s提供的线索,如果在您的构建环境中给您带来了困难,那么将URL参数放在URL的末尾也同样有效。浏览器客户端将使用不同版本参数将每个URL视为其缓存中的URL no,并将再次下载该文件。对于静态内容

,服务器不关心参数是否存在

因此,例如,http://mydomain.com/js/main.js可以作为http://mydomain.com/js/main.js?v1.5包含在您的HTML中。您可以更轻松地将版本#s传递到服务器端脚本并将其附加到客户端包含的URL中。

我见过的第二种方法是使用控制器服务器端来提供代码。 Facebook利用这一点。您将看到脚本标记中的包含始终以“.php”结尾。

E.g。

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

他们的后端根据请求中发送的环境确定需要将JS发送到客户端。