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

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

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

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

我敢肯定有人已经想到了这一点,并有经验分享:)

对我来说,使用WebSockets不是一种选择。首先是因为这是矫枉过正,其次是因为不是所有的客户都支持这项技术。同样的原因适用于所有WebSockets回退。..我不会因为这个而一直打我的服务器。

有什么想法吗?:)

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

谢谢!

有帮助吗?

解决方案

我经历了同样的问题。我的解决方案有意见,可能无法响应您的标准:

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

前侧:75%的我的路线更改隐含调用WebService(路由更改解析)。因此,每次拨打我的服务器时,我都包括包含包含前台客户端版本的自定义HTTP标头(或GET / POWARAMAR)。

服务器端:使用共享配置文件的前应用程序版本,比较前台版本(用户的浏览器中的浏览器中的一个,上次加载/加载SPA)

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

然后前侧:我添加了一个响应拦截器,拦截任何418个错误代码,并执行整个应用程序的力刷新

就是这样。基本上是“检查”如果前应用程序版本是最新的“检查”是路由更改(通过AJAX调用WS)。但是你可以添加一些无限的$ interval 5分钟左右拨打专用的ws ... 如果需要,我可以添加一些代码。

希望这有帮助;)

其他提示

假设您正在使用AngularJS通过$route service and provider的路由,那么您可以使用 $routeChangeSuccess 如果有需要更改的重大更改,则执行服务器请求的事件;如果有的话,那么你可以做一个窗口。位置。reload()刷新页面并获取所有更新的资源和html。

以下过程可以根据您想要实现的方式进行更改:

1.在服务器中设置一个配置文件,指示应用程序的版本。您也可以选择为不同的文件分配不同的版本,但由于您已经连接了所有资源文件,那么我想您可能会限制配置中的版本选项。

2.创建一个服务,其中包含所有必要的信息(来自服务器的文件版本)和方法,以便向服务器执行服务器请求,以检查服务中存储的当前文件版本。

3.使用方法 成功;成功 使用步骤中创建的服务执行服务器请求的事件 2, ,如果请求返回了一个有效的确认有更改,那么通过 window.location.reload().

我决定将最后的想法添加为这里的答案:

我们现在去了一个减少的解决方案。

我们有一个“代理服务”(现在再次)唯一一个与此应用程序交互的服务,我们在所有响应的HTTP标头上添加了应用程序版本。如果我们收到较新版本,将出现一个弹出窗口,通知用户,并发出完整页面刷新...

此解决方案不适用于没有自己的“私人”服务的应用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top