部署更新的Javascript文件

时间:2011-02-21 21:21:50

标签: javascript deployment

如果我想将bug修复程序部署到现有的JS文件中,如何确保旧文件不会缓存在客户端的计算机上?

4 个答案:

答案 0 :(得分:5)

通常,您的静态资源应该通过/static.js?ver=123等网址进行版本控制并提供服务。所以你需要的是增加版本号。以这个相同的网站为例,查看来源,您会在<head>部分注意到以下内容:

<script type="text/javascript" src="http://sstatic.net/js/master.min.js?v=689f646cde8d"></script>

答案 1 :(得分:4)

如果一切都符合规格,您不需要做任何特殊的事情。 HTTP已经有了解决这个问题的机制。浏览器应发送If-Modified-Since标头,其中包含检索日期或If-None-Match标头以及缓存副本的ETag。服务器将检查服务器上文件的修改时间(或ETag,其中应包括计算中的修改时间),如果mod时间小于浏览器给出的时间,或者ETag匹配,则返回304 Not Modified响应。浏览器只有在收到304响应时才应使用其缓存副本。

这里的一个问题是缓存代理,它们忽略任何服务器提供的Expires标头,或者假设它未来没有给出,在这种情况下你可以发送Cache-Control标头"must-revalidate" 3}}指令。

当然,浏览器或代理可能不合规,在这种情况下,其他答案会向您展示如何强制浏览器重新获取资源。

答案 2 :(得分:1)

如果您使用的是php

<link rel="stylesheet" 
    href="<?php echo './general.css?' . filemtime('./general.css'); ?>"
    type="text/css" media="screen, projection" />
永远忘记问题,它会添加吗?然后自动进行文件修改时间,每次更改文件时都会有所不同。

与其他语言应该相似。

答案 3 :(得分:0)

更改包含JS的HTML文档中的URL。

将一个数字(例如版本,源代码管理修订版,时间戳)附加到查询字符串是一种常见的技术。

例如:src="/js/myjs.js?7"