Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
部署更新的Javascript文件_Javascript_Deployment - Fatal编程技术网

部署更新的Javascript文件

部署更新的Javascript文件,javascript,deployment,Javascript,Deployment,如果我想对现有的JS文件部署bug修复程序,如何确保旧的文件不会缓存在客户端的计算机上?更改包含JS的HTML文档中的URL 将数字(例如版本、源代码管理版本、时间戳)附加到查询字符串是一种常见的技术 例如:src=“/js/myjs.js?7”通常,您的静态资源应该进行版本连接,并通过类似/static.js?ver=123的URL提供服务。因此,您只需增加版本号。以同一个站点为例,查看源代码,您将在部分注意到以下内容: <script type="text/javascript" sr

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

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

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


例如:
src=“/js/myjs.js?7”

通常,您的静态资源应该进行版本连接,并通过类似
/static.js?ver=123的URL提供服务。因此,您只需增加版本号。以同一个站点为例,查看源代码,您将在
部分注意到以下内容:

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

如果一切都符合规范,您不需要做任何特殊的事情。HTTP已经有了处理这个问题的机制。浏览器应发送包含检索日期的标题或包含缓存副本的标题。服务器将检查服务器上文件的修改时间(或ETag,计算中应包括修改时间),如果修改时间小于浏览器给定的时间,或ETag匹配,则返回304 Not MODIFED响应。浏览器应仅在收到响应时使用其缓存副本

其中的一个缺点是缓存代理,它要么忽略服务器提供的Expires头,要么假设它在未给出时在将来会很好,在这种情况下,您可以发送带有指令的头

当然,浏览器或代理可能不兼容,在这种情况下,其他答案会告诉您如何强制浏览器重新获取资源。

如果您使用的是php

<link rel="stylesheet" 
    href="<?php echo './general.css?' . filemtime('./general.css'); ?>"
    type="text/css" media="screen, projection" />

是否有任何已知的web服务器无法正确处理此问题?或者可能是https之类的?已知某些代理软件存在不使用查询参数缓存资源的问题。通常的做法是在文件名中包含一个版本号,例如,
jquery-1.4.2-min.js
@anddoutoi起初我认为这对版本控制的文件来说似乎不是很有用,但我想这可能是部署过程的一部分,可能是在文件被缩小时。但是服务器如何识别文件的正确版本,当它在URL中获取作为查询的版本时?除了URL之外,版本号不会出现在其他任何地方,或者我在这里误解了什么?这不会使浏览器在每次刷新页面时都加载(好像它是新的)文件吗?