如何避免网站使用本地缓存的JavaScript文件

How to avoide the website to use the locally cached JavaScript files?

本文关键字:缓存 JavaScript 文件 何避免 网站      更新时间:2024-03-24

朋友,

最近,我在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,之后当网站完成时,就不需要再这样做了,或者你可以只在开发阶段实现上面给定的代码,并在让你的网站上线之前删除它。