部署新版本时清除浏览器缓存

Posted

技术标签:

【中文标题】部署新版本时清除浏览器缓存【英文标题】:Clearing Browser Cache when deploy a new release 【发布时间】:2018-04-18 14:06:35 【问题描述】:

我有一个 ASP.Net MVC + angular Web 应用程序。大约有 500 多个用户正在使用该应用程序。

问题是每当我们进行新的发布/发布时,我们都必须让用户清除他们的浏览器缓存。这对用户来说很烦人。

其他网站(如 facebook 等)在更新其应用程序/网站时如何管理浏览器缓存,因为我们不会经常清除浏览器缓存。

有没有办法在有新版本时自动清除浏览器缓存。

【问题讨论】:

没有。您无法清除某人的缓存。您可以做的是将发布号添加到文件名中 - 例如将它们放在新文件夹 /v3.4.5/angularfile.js 【参考方案1】:

借助 ASP.Net Core MVC,您可以将 asp-append-version TagHelper 用于您的脚本文件。它计算文件的哈希并将其附加到文件名:

<link rel="stylesheet" type="text/css" href="myfile.css" asp-append-version="true" />    
<script src="myfile.js" asp-append-version="true"></script>

所以文件会变成这样:

<link rel=stylesheet href="myfile.css?v=qWYa_XOt9FCnEt2z8CjC7apiyjA5l9UA9UCqT028LI">
<script src="myfile.js?v=eN9kwxdWtX5aP8H3TFVOQrwu08Qndyktg5kvpSLa1A">

【讨论】:

【参考方案2】:

您可以通过任务运行器设置缓存清除:grunt、gulp 等。

通过使用文件计算的哈希值,您还可以更智能地破坏缓存。这样,只有在文件发生更改时才会缓存文件(从而提高性能)。

请查看此示例:https://github.com/shakyShane/grunt-cache-breaker(其他任务运行器也可以使用类似的模块)

【讨论】:

【参考方案3】:

您可以像这样在文件中添加版本号

<script type="text/javascript" src="pathTofile.some.js?v1"></script>

? 之后的文本可以是任何内容。查询字符串将有助于避免缓存,浏览器将加载不同的文件并使缓存中的文件无效

【讨论】:

你是指应用程序中的单个js文件还是应用程序中的所有js文件? 所有你想从服务器加载而不是从缓存加载的文件

以上是关于部署新版本时清除浏览器缓存的主要内容,如果未能解决你的问题,请参考以下文章

webpack指南

上传新版本代码时如何强制浏览器清除缓存

Vue 部署上线清除浏览器缓存

如何在启动更新版本的应用程序时清除浏览器缓存?

Angular 2/4 模板缓存破坏不起作用

在 Selenium IDE 中清除 Firefox 缓存