Mar*_*sen 43 javascript html5 caching angularjs
我的angular
应用程序现在不断变化,因为我们的团队现在正在快速更新.
由于缓存,我们的客户并不总是拥有我们代码的最新版本.
那么有一种方法angular
可以强制浏览器清除缓存吗?
aUX*_*der 20
您可以使用一个非常简单的解决方案,包括在脚本文件中添加哈希值.每次部署应用程序时,您都会通过gulp/grunt任务自动使用不同的哈希值来提供文件.举个例子,你可以使用gulp-rev.我在所有项目中使用这种技术并且工作正常,在构建/部署过程中自动化可以成为所有项目的解决方案.
用于AngularJS generator-gulp-angular的 Yeoman生成器(这是我选择的生成器)使用此解决方案来确保浏览器加载新的优化文件而不是缓存中的旧文件.请创建一个演示项目并使用它,您将看到它正在运行.
Vas*_*huk 11
如上所述,解决浏览器缓存问题的常见解决方案是向加载的资源文件添加某种版本标记(版本号,时间戳,哈希等).这包括用户加载页面或重新加载页面的情况.正如已经告诉gulp任务,WebPack,一些后端框架如Asp.net MVC等支持此功能以及捆绑,最小化,混淆等.最好还用它们解决另一个相关问题.
但有人认为他们无法解决它正在更新主页本身并在后端更改(部署)时加载已经存档的文件.例如,您部署应用程序,而其他用户使用您的单个页面而不重新加载它.或者用户在浏览器选项卡中打开应用程序,并在一小时内返回此页面.在这种情况下,一些已经加载的已经包含主页的文件是旧的,而在后端的一些是新的.此外,所有已加载的文件都具有对文件的旧引用,这些文件可能不存在于后端但在浏览器中缓存.所以,一般来说,你已经破坏了应用程序,这实际上是Angular无法解决的更普遍的问题.
要解决此问题,您需要通知您的用户存在新的应用程序版本,他们需要重新加载页面或强制重新加载.从用户体验的角度来看,第二种方法并不好.让我们假设您正在工作,并且在某个时刻页面开始重新加载.很奇怪,对吗?
为了通知用户有关新版本的信息,你可以使用websokets消息来关于新版本的应用程序,在每个响应中传递版本(不是一个好的解决方案)或不时地提取有关新版本的后端(不是很好).但它们都不是微不足道的.如果您的应用程序登录会话很短,您可以在重新登录时刷新版本,刷新身份验证cookie等等.
因此,要完全解决这个问题,您需要实现文件捆绑+新版本用户通知机制.