首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AngularJs强制浏览器清除缓存

AngularJs强制浏览器清除缓存
EN

Stack Overflow用户
提问于 2015-08-06 16:39:19
回答 3查看 59.6K关注 0票数 45

我的angular应用程序这些天一直在变化,因为我们的团队现在正在运行快速更新。

由于缓存的原因,我们的客户端并不总是拥有最新版本的代码。

那么,在angular中有没有办法强制浏览器清除缓存呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-12 01:05:26

您可以使用一个非常简单的解决方案,将散列附加到您的脚本文件中。每次部署你的应用程序时,你都会通过一个吞咽/呼喊任务自动为你的文件提供不同的散列。例如,您可以使用gulp-rev。我在我的所有项目中都使用了这种技术,并且工作得很好,这在您的构建/部署过程中自动进行,可以为您的所有项目提供解决方案。

AngularJS generator-gulp-angular的Yeoman生成器(这是我选择的生成器)使用此解决方案来确保浏览器加载新的优化文件,而不是缓存中的旧文件。请创建一个演示项目并使用它,您将看到它的实际效果。

票数 21
EN

Stack Overflow用户

发布于 2017-06-27 11:58:05

如上所述,解决浏览器缓存问题的常见解决方案是向加载的资源文件添加某种版本令牌(版本号、时间戳、散列等等)。这涵盖了用户加载页面或重新加载页面的情况。正如已经告诉gulp的,WebPack,一些后端框架,如Asp.net MVC等,通过捆绑、最小化、混淆等方式支持此功能。最好用它们来解决另一个相关的问题。

但有人认为他们不能解决更新主页本身和加载已经在后端更改(部署)的文件的问题。例如,当其他用户使用您的单个页面而不重新加载它时,您部署应用程序。或者用户在浏览器选项卡中打开了应用程序,并在一个小时后返回到此页面。在这种情况下,一些已经加载的文件,包括主页是旧的,而在后端的一些是新的。此外,所有已加载的文件都有对文件的旧引用,这些文件可能不存在于后端,但缓存在浏览器中。所以,一般来说,你在这里破坏了应用程序,这实际上是一个更普遍的问题,Angular不能自己解决。

为了解决这个问题,你需要通知你的用户存在一个新的应用程序版本,他们需要重新加载页面或强制重新加载页面。第二种方法从用户体验的角度来看并不好。假设您正在工作,页面在某个时刻开始重新加载。很奇怪,对吧?

为了通知用户新版本,你可以使用websokets消息来通知app关于新版本的消息,在每个响应中传递版本(不是一个好的解决方案),或者时不时地拉取一个新版本的后端(也不是一个好的版本)。但它们都不是微不足道的。如果您的应用程序登录会话很短,您可以在重新登录时检查版本,刷新auth cookies等。

因此,要完全解决这个问题,您需要实现文件捆绑+新版本用户通知机制。

票数 11
EN

Stack Overflow用户

发布于 2017-03-28 23:55:24

如果你正在寻找一个非常简单的解决方案,并且你的集成开发环境是C#下的visual studio,你可以获得app build Id并连接你的js文件url。

首先,您应该为次要版本激活增量,如下所示:

转到您的项目属性,在新窗口的Application下,单击Assembly Information并为Assembly version添加一个"*“(如上图所述的最后一个数字)。

在这之后,添加一个新的属性到你的代码后面的aspx,或者web服务或webapi,等等……对于这段代码,我使用了aspx:

代码语言:javascript
运行
复制
    public string GetVersionApp => System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

然后,通过html调用该属性,并将该值连接为url文件中的param,如下所示:

代码语言:javascript
运行
复制
<script type="text/javascript" src="App/RequestsList/directives/comment-directive.js?<%=GetVersionApp%>"></script>

使用此解决方案,只有在发生新的构建时才会重新加载文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31850824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档