一尘不染

检测单个页面应用程序上的应用程序版本更改

angularjs

今天在这里提出了一个问题,我没有明显的答案。

假设我们串联并缩小所有资源文件(CSS和Javascript),并在“母版页”中声明它们。

在多页应用程序上,如果CSS文件发生更改,它将在下一次整页加载时重新充电。

在单页应用程序上,用户可以继续工作数天,并且永远不会为声明CSS文件的主页充值。在发出Ctrl-F5之前,用户永远看不到更改。

我确定有人已经想到了这一点,并且有经验可以分享:)

对我来说,使用WebSockets不是一种选择。首先是因为它过于严格,其次是因为并非我的所有客户都支持该技术。相同的原因也适用于所有WebSocket的后备…因此,我不会继续打我的服务器。

那么,有人有什么想法吗?:)

顺便说一句,我们正在使用AngularJS,如果这可以帮助特定的解决方案。

谢谢!


阅读 206

收藏
2020-07-04

共1个答案

一尘不染

我已经解决了同样的问题。我的解决方案有针对性,可能无法满足您的要求:

当我打包前端应用程序和服务器应用程序时,我共享一个包含前端应用程序当前版本的配置文件。

前端:我的路由更改中有75%隐式调用Web服务(路由更改解决)。因此,每次调用服务器时,我都会包含一个自定义HTTP标头(或GET /
POST参数),其中包含前端应用程序的客户端版本。

服务器端:我将前端应用程序版本(用户浏览器中的版本,上次用户刷新/加载SPA时加载)与共享配置文件的前端应用程序版本进行比较:

  • 如果版本匹配:我什么也不做。
  • 如果版本不匹配,我会发送自定义HTTP状态错误代码(例如418)

然后是前端:我添加了一个响应拦截器,该拦截器拦截任何418错误代码并强制刷新整个应用程序

而已。基本上,“检查”前端应用程序版本是否最新的事件是路由更改(通过ajax调用WS)。但是您可以添加一些无限的$
interval,每5分钟左右调用一个专用WS …如果需要,我可以添加一些代码。

希望这可以帮助 ;)

2020-07-04