您在获取Web应用程序的缓存部分方面有什么诀窍?
使到期日期过长,我们会有很多陈旧的缓存,太短,我们冒着服务器因不必要的请求而超载的风险。
如何确保所有更改都会刷新所有缓存?
如何将SVN修订版嵌入代码/网址?
并排多个版本真的有助于解决版本不匹配问题吗?
答案 0 :(得分:2)
查看minify项目。它是用PHP编写的,但您可以将它用作任何语言的蓝图。
主要特点:
示例资源可能看起来像
<script type="text/javascript" src="/min/g=js1&1248185458"></script>
将在您的配置中获取“js1”组javascript文件,版本号为“1248185458”,这实际上只是转换为纪元时间的最后修改日期。
当您在生产服务器上放置更新的js文件时,它们将有一个新的修改日期自动成为新的版本号 - 没有过时的缓存,没有手动版本控制。
这是一个非常酷的项目,有一些关于优化和缓存的经过深思熟虑的想法。我稍微修改了这个过程,将YUI compressor插入到构建过程中。您可以通过修改服务器的标题here和here来阻止上次修改后的来自浏览器,从而进一步优化它。
答案 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发送到客户端。