加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 刷新缓存的Angular SPA

发布时间:2020-12-17 18:06:17 所属栏目:安全 来源:网络整理
导读:基本设置:Apache 2.4提供的Angular 1.5 SPA由REST api支持,也支持Apache 2.4. 我已经阅读了所有可用的技术,以便在服务器上更改某些应用程序代码后允许SPA更新并更新. 解决方案来自HTTP caching(HTTP标头)或缓存清除(例如版本控制文件名)技术.所有这些都基于
基本设置:Apache 2.4提供的Angular 1.5 SPA由REST api支持,也支持Apache 2.4.

我已经阅读了所有可用的技术,以便在服务器上更改某些应用程序代码后允许SPA更新并更新.

解决方案来自HTTP caching(HTTP标头)或缓存清除(例如版本控制文件名)技术.所有这些都基于Web浏览器发出请求获取资源并具有一些机制来了解内容是否需要更新或是否可以从缓存提供.

SPA的主要问题是,在初始加载后通常不会对资源进行请求,因为Web应用程序在浏览器中加载得很快,并且只启动对后端的XHR调用来加载数据.在许多情况下,由于长时间不刷新文件的不便,用户不会关闭标签很多天.

最难的问题是index.html文件(see this post).这个只在您第一次在浏览器中加载应用程序时调用,然后永远不会请求它.只有手动浏览器页面重新加载才能初始化此文件的第二个请求.

在请求index.html之后加载所有javascript和css文件,然后永远不会重新加载.只有index.html的新请求才能刷新它们.

如果在初始加载后没有获得index.html的请求,那么缓存控制头或缓存清除策略如何允许javascript或css文件在服务器上更改时刷新?

我遇到了这个问题的两种方式:

> REST API必须与Web应用程序兼容.如果我在API中引入了重大更改,并且用户没有重新加载页面,则可能会触发离开数据不一致的错误.
>由于html文件可以在javascript或css文件没有执行时重新加载,因此可以提供不兼容的html文件(例如缺少CSS类定义或范围引用).

我发现的唯一真正的解决方案是:

> this answer
>检查每个XHR调用当前部署的版本,并检查它是否与浏览器中加载的版本不同,

但:

>在绝大多数情况下,保持所有版本化(数据库,API,服务器代码,客户端代码)似乎需要很多开销,每个人都将使用相同的版本.
>这将是非常用户不友好的,有消息告诉整个应用程序将被重新加载并丢失未保存在后端的所有数据.考虑填写表格,按下保存后再强制重新输入所有数据.

我遗漏了每个人如何处理Angular缓存的问题?

解决方法

您可以使用URL查询参数来帮助您.我们在应用程序中执行的操作是在资源(脚本,图像)的末尾附加查询参数,并为下一个主要版本更新它.示例:

<script src="angular.js?v=1.1"/>

在下一个主要版本发布后,将其更改为

<script src="angular.js?v=1.2"/>

URl是新的,此更改强制Web服务器请求新文件.

大多数大角度应用程序都由require.js备份,它提供了自己的配置来处理缓存问题.示例:

require.config({
    baseUrl : 'resources/app',urlArgs : 'v=1.2'
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读