【发布时间】:2011-07-01 13:57:20
【问题描述】:
如果我想为现有的 JS 文件部署错误修复,如何确保旧的没有缓存在客户的计算机上?
【问题讨论】:
标签: javascript deployment
如果我想为现有的 JS 文件部署错误修复,如何确保旧的没有缓存在客户的计算机上?
【问题讨论】:
标签: javascript deployment
通常情况下,您的静态资源应进行版本控制,并通过/static.js?ver=123 等网址提供服务。所以你只需要增加版本号。以这个相同的站点为例,查看源代码,您会在<head> 部分注意到以下内容:
<script type="text/javascript" src="http://sstatic.net/js/master.min.js?v=689f646cde8d"></script>
【讨论】:
jquery-1.4.2-min.js.
如果一切都符合规范,那么您不需要做任何特别的事情。 HTTP 已经有机制来处理这个问题。浏览器应发送带有检索日期的If-Modified-Since 标头或带有缓存副本的ETag 的If-None-Match 标头。服务器会检查服务器上文件的修改时间(或者ETag,计算中应该包含修改时间),如果修改时间小于浏览器给定的时间,或者ETag匹配,返回一个304 未修改响应。浏览器只有在收到 304 响应时才应使用其缓存副本。
其中一个问题是缓存代理,它们要么忽略任何服务器提供的 Expires 标头,要么在未给出时假设它在未来会很好,在这种情况下,您可以发送带有 "must-revalidate" 指令的 Cache-Control 标头.
当然,浏览器或代理可能不兼容,在这种情况下,其他答案将向您展示如何强制浏览器重新获取资源。
【讨论】:
如果你使用的是 php
<link rel="stylesheet"
href="<?php echo './general.css?' . filemtime('./general.css'); ?>"
type="text/css" media="screen, projection" />
永远忘记这个问题,它会添加 ?后跟文件自动修改时间,每次更改文件时都会有所不同。
应该跟其他语言类似。
【讨论】:
更改包含 JS 的 HTML 文档中的 URL。
在查询字符串中附加一个数字(例如版本、源代码控制修订、时间戳)是一种常用技术。
例如:src="/js/myjs.js?7"
【讨论】: