基本设置:由Apache 2.4提供的Angular 1.5 SPA由REST api支持,Apache 2.4也提供了REST API。
我已经阅读了在服务器上更改了一些应用程序代码后可以使SPA更新和更新的所有可用技术。
解决方案通过HTTP caching(HTTP header )或缓存清除(例如版本文件名)技术实现。所有这些都是基于Web浏览器发出的请求以获取资源,并具有某种机制来知道内容是否需要更新或可以从缓存中提供。
SPA的主要问题在于,由于Web应用程序很高兴在浏览器中加载,并且仅启动对后端的XHR调用才能加载数据,因此在初始加载后通常不会发出对资源的请求。在许多情况下,用户很长一段时间都没有关闭选项卡,这带来了很长时间不刷新文件的不便。
最困难的问题是index.html
文件(see this post)。第一次在浏览器中加载应用程序时,只会调用一次,然后再也不会请求它。只有手动浏览器页面重新加载才能发起对该文件的第二次请求。
在请求index.html
之后,将加载所有javascript和css文件,然后再也不会重新加载。只有对index.html
的新请求才能刷新它们。
如果在初始加载后未发出获取index.html
的请求,那么当服务器上的javascript或css文件更改时,缓存控制 header 或缓存清除策略如何允许它们刷新?
我受到此问题的两种影响:
我发现的唯一实际解决方案是:
但:
我在每个人如何处理Angular缓存时丢失了一些东西?
最佳答案
您可以使用URL查询参数来帮助您。在我们的应用程序中,我们要做的是在资源(脚本,图像)的末尾附加一个查询参数,并在下一个主要版本中对其进行更新。例子 :
<script src="angular.js?v=1.1"/>
在下一个主要版本发布后,将其更改为
<script src="angular.js?v=1.2"/>
由于UR1是新的,此更改强制Web服务器请求新文件。
大多数大型 Angular 应用程序都由
require.js
备份,该文件提供了自己的配置来处理缓存问题。例子 :require.config({
baseUrl : 'resources/app',
urlArgs : 'v=1.2'
});
关于angularjs - 刷新缓存的Angular SPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44823608/