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

ni65a41a  于 2023-02-07  发布在  Angular
关注(0)|答案(3)|浏览(160)

今天有人提出了一个问题,我没有一个明确的答案。
假设我们连接并缩小所有资源文件(CSS和Javascript),并在"主页"中声明它们。
在多页面应用程序中,如果CSS文件发生更改,则会在下一次加载整个页面时重新收费。
在一个单页应用程序上,用户可以连续工作几天,而不会在声明CSS文件的主页面上充值。用户在发出Ctrl-F5之前永远不会看到更改。
我敢肯定有人已经想到了这一点,并有经验分享:)
对我来说,使用WebSockets不是一个选择。首先是因为它是矫枉过正,其次是因为不是我所有的客户都支持这项技术。同样的原因适用于所有的WebSockets后备...我不会因为这个一直攻击我的服务器。
那么,有人有什么想法吗?:)
顺便说一句,我们正在使用AngularJS,如果它可以帮助一个特定的解决方案。
谢谢!

fsi0uk1n

fsi0uk1n1#

我也遇到过同样的问题,我的解决方案很武断,可能不符合你的标准:
当我打包我的front-app和server-app时,我会共享一个包含当前版本的front-app的配置文件。
前端:75%的路由更改隐式调用Webservice(路由更改解析)。因此,每次调用服务器时,我都会包含一个自定义HTTP头(或GET/POST参数),其中包含前端应用的客户端版本。
服务器端:我将前端应用程序版本(用户浏览器中的版本,用户上次刷新/加载SPA时加载)与共享配置文件的前端应用程序版本进行比较:

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

然后正面:我添加了一个响应拦截器,它可以拦截任何418错误代码,并强制刷新整个应用程序
就是这样。基本上"检查"前端应用版本是否是最新的事件是一个路由改变(通过ajax调用一个WS)。但是你可以添加一些无限的$interval,每5分钟左右调用一个专用的WS ...如果需要的话,我可以添加一些代码。
希望这有帮助;)

a64a0gku

a64a0gku2#

假设您正在通过$route服务和提供程序使用AngularJS的路由,那么如果有需要更改的重大更改,您可以使用$routeChangeSuccess事件来执行服务器请求;如果有的话,你可以使用window.location.reload()来刷新页面,得到所有更新的资源和HTML。
可以根据您希望如何实现以下过程来更改该过程:

1.在服务器中设置一个配置文件,指示应用程序的版本。您也可以选择为不同的文件分配不同的版本,但由于您已经连接了所有的资源文件,所以我猜您可能会在配置中限制您的版本选项。
2.创建一个服务,该服务包含所有必要的信息(服务器中文件的版本)和方法,以便向服务器执行服务器请求,检查服务中存储的当前文件版本。
3.使用$routeChangeSuccess事件执行使用您在步骤2中创建的服务的服务器请求,如果请求返回了有效的确认,表明存在更改,则通过window.location.reload()强制重新加载页面。

p1tboqfb

p1tboqfb3#

我决定在这里也加上我最后的想法作为回答:
我们暂时采用了简化的解决方案。
由于我们有一个“代理服务”,它是(现在也是)唯一一个与这个应用程序交互的服务,我们在所有响应的http头上添加了应用程序版本。如果我们收到一个更新的版本,会出现一个弹出窗口通知用户,并发出一个完整的页面刷新...
这种解决方案不适用于没有自己的“私有”服务的应用程序。

相关问题