缓存破坏由Require.js优化的网站

时间:2012-07-12 15:45:07

标签: javascript caching requirejs

我有一个使用require.js的网络应用程序(除了几个CDN提供的资源)。我正在使用优化工具来创建“已发布”网站。

我担心的是,当发布新版本的Web应用程序时,用户将无法获得更新的js文件,因为它们将被浏览器缓存。

除非使用'urlArgs'配置选项,否则在开发应用时问题非常明显。

通常的解决方案是在脚本引用中附加一个?v = 1.0的查询字符串,但由于它们都是通过require.js处理的,因此无法做到这一点。

所以,我的问题是如何确保客户端在发布新版本时下载新版本的js / css文件?

1 个答案:

答案 0 :(得分:1)

如果您使用的是require.js,则必须使用require对象设置“bust”urlArgs befre。像这样:

<script>
    var require = {
        urlArgs : "bust=" + releaseVersion
    };
</script>

我在CSS和图像方面处于类似情况。如果您的Web应用程序位于Apache之后,则可以在mod_headers模块中将cache-control标头设置为http响应。就我而言,我的网络应用程序并不落后于Apache。我直接打了Glassfish。所以我最后添加了一个Servlet过滤器,并在将每个CSS和图像响应转发到过滤器链之前手动添加了缓存控制头。之后,当有一个CSS更改时,我只是在HTML中添加一个url参数:

<... "main.css?version=release10" />

浏览器会看到此URL更改并从服务器获取CSS。图像也一样。对于JS,您必须更新“Bust”值。