如何强制更新 Single-page 应用程序

How to force an update of a Single-page application

我在一个 AngularJS Single-page 应用程序上工作,一旦加载(所有资源都从 HTTP 服务器获取)仅访问 REST 后端以获取 get/send 数据。任务是如何确保用户始终使用最新版本的前端代码(.js.css.html 文件),同时用户从不离开页面并且从不刷新浏览器.

我认为有几种选择:

  1. 前端每N分钟询问一次HTTP服务器最新的前端代码版本是多少
  2. 后端在前端代码检查的每个响应中包含最新的前端代码版本(例如,一个额外的 HTTP header)
  3. 后端 returns 具有最新前端代码版本的 cookie,并检查用户提供的版本是否已过时
  4. 浏览器和后端之间的 websocket 连接(我不适合)

你知道其他方法吗?

你也可以使用html5 application cache,这样每次有变化,网站会在第一次访问时自行更新,非常方便,比普通缓存更快。

最近我在我的 Agnularjs SPA 中使用了第二种方法。我做的是

在我的 angularjs APP 的 .htaccess 和我的 API 服务器的 .htaccess 我添加了一个 header:

<IfModule mod_headers.c>
    Header add appVersion "1.2"
</IfModule>

现在,每当我从 API 服务器或前端(js、html、css、图像)获取任何内容时,我都会收到此 header

现在在我的 index.html 中我定义了一个类似于

的变量
var frontendVersion = 1.2

我有一个 http 响应拦截器,它会查找每个响应,我已经做了类似的事情

myAPP.factory('httpRespInterceptor', function () {

    return {
        response: function (response) {
            var appVersion = response.headers('appVersion')
            if(appVersion == frontendVersion) {
                console.log('ok')
            } else if (appVersion != null) {
                location.reload();
            }

            return response;
        }
    };
});

我添加了一个空检查,因为当我加载同一个视图两次时,我得到的是 Empty Header Object 并且在我的控制台中我没有看到任何发送到的请求服务器..不知道为什么会发生这种情况,如果有人能解释一下,我们将不胜感激:)

所以每当我对我的 code/update 应用程序进行更改时,我都会将我的 header appVersion 更改为 1.3 并将我的 index.html 变量更改为 var frontendVersion = 1.3

希望对您有所帮助。如果还有其他最佳解决方案,请告诉我,

谢谢,