我有一个在 hostgator 上运行的应用程序。当我对 js 文件进行更改时,我的用户在清除缓存之前看不到更改。这是将更改推送到我的应用程序的唯一选择吗?基本上,我应该进行更改,更新文件,然后请求所有用户清除他们的缓存?
6 回答
您需要对文件包含使用版本控制。每当您更改文件包含的 URI 时,浏览器将找不到缓存匹配并重新下载包含。
例如:
<script type="text/javascript" src="include/232/init.js"></script>
其中 232 是您的可修改版本号,每当您发布新代码时都应更改该版本号。
或者,您可以使用查询字符串:
<script type="text/javascript" src="include/init.js?232"></script>
关键是,当您希望访问者重新下载文件时,您应该以某种方式更改文件包含 URI。
如果您使用 PHP 或其他服务器端语言,您可以设置此版本控制以在您的文件包含被修改时自动发生:http: //derek.io/blog/2009/auto-versioning-javascript-and-css-files/
您可以将虚拟查询字符串附加到资产 URL:
<link href="http://mysite.com/main.css?v=1" rel="stylesheet" />
然后,每当您对 CSS 进行任何更改时,只需提高版本号即可。
这种技术称为缓存清除。搜索谷歌,你会得到许多不同的变化。
解决此问题的一个技巧是将带有某种版本或时间戳的查询字符串附加到您的link
Javascript 调用中。例如:
<script src="myexternal.js?20130116" type="text/javascript"></script>
这个例子很简单,但证明了这一点。基本上,这会告诉浏览器在无法识别完整路径时加载文件。每当您更改您的 javascript 文件并希望您的用户获取最新版本时,只需在问号(查询字符串)之后更新该时间戳或值。
您无法清除客户端浏览器的缓存,但可以使用缓存清除技术,例如向文件添加版本控制
<link rel="stylesheet" href="/css/example.css?v1.0" type="text/css" />
然后当你做出改变时
<link rel="stylesheet" href="/css/example.css?v1.1" type="text/css" />
它可以是时间戳或其他任何东西,只是需要有所不同。
我用来避免这个问题的技巧是修改更新脚本的 url。由于资源名称不同,这将强制客户端再次下载脚本。
最简单的方法:在 url 末尾使用版本号js/my-script.js?v=1.0
。
更好的方法(所有导航器 100% 支持):更改文件名本身js/my-script.v1.0.js
。
我有时使用的一个简单技巧是在 JavaScript/CSS 文件的路径中添加一些虚拟参数。浏览器本质上会看到不同的 URL,并且不会使用它的缓存版本。
$jsFile = '/js/myFile.js'; // probably cached
$jsFile = '/js/myFile.js?r='.time(); // won't ever be cached
您无法真正清除客户端缓存,但您可以欺骗客户端浏览器,使其认为这是它第一次看到此文件并会再次下载它。
到达稳定版本后,不要忘记禁用此功能。缓存文件是加快应用程序加载时间的好方法。