如何避免网站使用本地缓存的JavaScript文件
How to avoide the website to use the locally cached JavaScript files?
朋友,
最近,我在Client的位置托管了一个网站(使用ASP.Net开发),其中包含许多用于富UI交互的JavaScript内容。一切正常。但主要问题是——
当我对JavaScript文件进行一些更改并上传时,它不会在客户端的位置生效,因为那里的网站会获取本地缓存的JavaScript文件。
那么,我该如何避免这种情况呢?
有什么技术可以解决我的问题吗?
在url的末尾添加一些随机生成的数字/时间戳到js文件中,如-
http://example.com/my_js_file.js?12345
经过一番研究,我们得出了以下标题列表,这些标题似乎涵盖了大多数浏览器:
- 有效期:1997年7月26日星期一格林尼治标准时间05:00:00
- 缓存控制:无缓存,专用,必须重新验证,最大过期=0,后检查=0,预检查=0无存储
- Pragma:没有缓存
在ASP.NET中,我们使用以下片段添加了这些:
Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.0
从以下位置找到:http://forums.asp.net/t/1013531.aspx
以上解决方案来自这里。
与其只有script
标签来加载Javascript,不如动态加载
<script>
function loadScript(name) {
var s = document.createElement("script");
s.src = name + "?" + (new Date).getTime();
document.body.appendChild(s);
}
loadScript("script1");
loadScript("script2");
</script>
请参阅此答案中有关缓存的注释:显示/隐藏较小的
把缓存当成你的朋友。
有一些技术可以避免浏览器使用缓存过期来缓存资源。
protected void Application_BeginRequest()
{
//NOTE: Stopping IE from being a caching whore
HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.Now);
Response.Cache.SetValidUntilExpires(true);
}
但对于您的情况,这是不可取的,我认为您的项目正处于开发阶段,为了避免cntrl + F5
重新加载资源,删除缓存的资源并再次重新加载,您不应该实施此补救措施,因为这会降低您的网站性能。
更简单、更合理的解决方案是告诉你的客户合作,每当他们想看到网站的最新变化时,就按cntrl + F5
,之后当网站完成时,就不需要再这样做了,或者你可以只在开发阶段实现上面给定的代码,并在让你的网站上线之前删除它。
相关文章:
- 如何在从浏览缓存加载页面时执行javascript
- Javascript清除缓存以清除基本身份验证凭据
- 在Javascript中使用全局变量作为缓存是很好的
- 登录后重定向,缓存页面问题-Javascript
- 缓存javascript失败,因为使用了外部javascript
- 尽管有更改,仍缓存 JavaScript 文件
- 缓存 JavaScript 内联在 HTML 中
- 缓存javascript文件的执行
- 配置IIS以指示浏览器不缓存JavaScript文件
- 阻止UIWebView缓存JavaScript文件
- 在所有页面中缓存javascript文件
- 禁止缓存JavaScript/CSS
- 嵌入式浏览器在adobeair /Flex -缓存javascript和css文件
- 如果路径中有一个querystring, Firefox是否缓存javascript并在没有请求的情况下使用它?
- 利用304 HTTP响应从Java应用服务器缓存JavaScript中的数据是否正常?
- HTML5缓存Javascript文件供在线和离线使用
- 是否有一个插件会自动缩小和缓存JavaScript
- 浏览器缓存javascript和css文件
- 如何缓存javascript文件
- ASP.. Net / Javascript网站:使用IIS如何停止缓存Javascript