3

朋友们,

最近我在客户端托管了一个网站(使用 ASP.Net 开发),其中包含许多用于丰富 UI 交互的 JavaScript 内容。一切正常。但主要问题是——

当我对 JavaScript 文件进行一些更改并上传时,它不会在客户端生效,因为那里的网站采用本地缓存的 JavaScript 文件。

那么,我该如何避免这种情况呢?

有什么技术可以解决我的问题吗?

4

5 回答 5

6

在 url 的末尾附加一些随机生成的数字/时间戳到 js 文件,如 -

http://example.com/my_js_file.js?12345

于 2012-07-28T05:38:07.627 回答
2

经过一番研究,我们得出了以下似乎涵盖大多数浏览器的标头列表:

在 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


以上解决方案来自这里

于 2012-07-28T05:34:22.640 回答
1

而不是只有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>
于 2012-07-28T05:44:36.540 回答
0

请参阅此答案中有关缓存的注释: 使显示/隐藏更小

将缓存视为您的朋友。

于 2012-07-28T05:43:20.590 回答
-1

有一些技术,例如避免浏览器使用缓存过期来缓存资源。

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在他们想要查看站点的最新更改时进行合作并按下,之后站点完成时将不再需要这样做,或者您可以实现上面给出的代码仅在开发阶段,并在您的网站上线之前将其删除。

于 2012-07-28T05:33:39.643 回答