AngularJS浏览器缓存问题

CaT*_*ist 20 caching angularjs

早上好,我在生产环境中有一个Web应用程序.用户每天都在使用它,当我发布更新并且用户返回到Web应用程序时,他查看旧版本的Web应用程序.他需要刷新浏览器才能加载新版本.我怎么解决这个问题?每次发布更新(每周3-4次)时,我都无法告诉数百名用户刷新页面.

juc*_*uco 13

经典的缓存问题.除非另有说明(由网络服务器),否则浏览器将根据文件名缓存资产.因此,当它看到具有相同名称的相同脚本/样式/图像时,它将304并提供缓存版本.有几种方法,你可以:

配置Web服务器以告知浏览器不要缓存该文件.这显然是低效的,因为用户必须一次又一次地下载相同的文件.

将查询字符串参数附加到文件名,例如my-angular-code.js?x=123,再次低效.

指纹您的资产.这在Rails的资产管道文档中得到了很好的解释.有几种方法可以实现这一点,还有可用的grunt任务gulp任务.本质上,它是仅在内容更改时更改文件名的过程,强制浏览器将其视为新文件.

  • @juco为什么追加查询字符串到文件名效率低? (3认同)
  • 我不认为查询字符串是低效的.如果它一直在变化,但如果你这样做.?version = 2.5.1并在更新发生时更新版本然后应该没有问题. (2认同)

Man*_*kla 11

一个简单的解决方案是向文件中添加表示时间戳或会话ID的查询字符串.

例如,在我们的弹簧应用中,我们只需使用:

<script src="js/angular/lib/app.js?r=<%= session.getId()%>"></script>
Run Code Online (Sandbox Code Playgroud)

您也可以在特定于服务器的实现中实现相同的解决方案.