【问题标题】:Clear caching of javascript in azure在 azure 中清除 javascript 的缓存
【发布时间】:2016-03-29 11:50:20
【问题描述】:

我确定以前有人问过这个问题,但我找不到完全相同的问题。

我有一个使用大量 javascript 文件的天蓝色云服务。我仍在开发该网站,因此 javascript 文件经常更改。当 javascript 文件发生更改时,我会清除浏览历史记录,在重新运行代码之前选择“临时 Internet 文件和网站文件”。但是,该网站似乎坚决保留我的 javascript 文件并继续运行旧代码。这是 Chrome、IE 和 Firefox 中的问题。如果我多次清除浏览历史记录,它最终会找到新代码。

我知道有一些方法可以通过更改新版本的 js 文件的路径来强制浏览器重新加载文件。但是,我只是在测试,不想每次更改几行代码时都必须更新文件名。所以我想要一种方法来清除浏览器中的缓存。

我还在为我的文件使用 html5 离线缓存,所以这可能会增加复杂性。

如何轻松清除旧的 javascript 文件?我可以以编程方式执行此操作吗?

【问题讨论】:

  • 你是用asp.net渲染页面还是纯html?
  • 我有几个asp页面,但我的大部分页面都是html
  • 我很确定,以编程方式(在客户端)无法完成。它可以在服务器上完成,打个招呼不要缓存。我仍然认为,将 get 参数添加到您的 js 包含将是最简单的,例如 <script src="script.js?123"></script> 其中 123 可能是时间戳,并在更新文件时更改它。我认为使用 gulp 或 grunt 可以轻松更新这些参数。
  • 好的,让我们忘记以编程方式进行。我知道更改文件名是可行的,但这需要付出努力——我的脱机清单文本文件中列出了所有文件,所以不要认为时间戳可以轻松更改所有这些文件。我想要的只是一种在我打开浏览器时清除 js 文件缓存的方法。 “清除浏览历史记录”不起作用是否有某种原因?在 IE 中,我曾经能够只刷新页面,这会拉入新文件 - 但这似乎不再有效。
  • 或许this?

标签: javascript azure caching


【解决方案1】:

我已经走这条路几次了,无论如何,无一例外,有效的方法是添加一个查询字符串变量。这就是为什么这么多框架(例如 jquery、angular)会在 ajax 的查询字符串中添加一个基于缓存清除日期的值)。其他所有方法都会导致一个或另一个令人头疼的问题、浏览器不一致、随机错误,因为一个文件更新但另一个文件没有更新。

这是我目前使用的一个示例,它在 ASP.NET 中使用 Angular:

@{
     var v = Request.IsLocal ? DateTime.Now.Ticks : ViewBag.Version;
 }

 <script>var version = "@v";
 <script src="/javascript_file.js?v=@v"></script>

我使用一个局部变量 (@v) 在文件上设置查询字符串值,我还使用它来设置一个全局 JavaScript 变量,该变量可在 js 中用于模板和其他文件。

如果我在本地工作,那么我总是会获得每个文件的最新版本。部署后,版本号会在应用程序启动时设置(使用构建版本进行自动递增 - 这样每个部署的版本构建将具有不同的版本号)。

这样做的缺点是需要重新加载一些未更改的文件,但这比试图告诉数百名用户(按 f5 重新加载页面)要好...

!我不确定这将如何影响离线缓存,但我认为同样适用。

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2020-01-24
    相关资源
    最近更新 更多