如何强制更新单页面应用程序

时间:2015-07-08 18:28:08

标签: javascript angularjs single-page-application

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

我认为有几种选择:

  1. 前端每N分钟询问HTTP服务器什么是最新的前端代码版本
  2. 后端包含每个响应中的最新前端代码版本(例如,额外的HTTP头),由前端代码检查
  3. 后端返回一个包含最新前端代码版本的cookie,并检查用户提供的版本是否过时
  4. 浏览器和后端之间的websocket连接(不是我的选项)
  5. 你知道其他方法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

在我的angularjs APP的.htaccess和我的API服务器的.htaccess中,我添加了一个标题:

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

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

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

的变量
var frontendVersion = 1.2

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

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;
        }
    };
});

我添加了一个空检查,因为当我加载相同的视图两次时,我得到了空标题对象,在我的控制台中,我没有看到任何正在发送到服务器的请求。我有一个线索,为什么会发生这样的事情,如果有人可以发光,那将是非常感激的。)

所以每当我在代码中更改/更新应用程序时,我都会将我的标题appVersion更改为1.3,将index.html变量更改为var frontendVersion = 1.3

我希望这会有所帮助。如果有除此之外的最佳解决方案,请告诉我,

谢谢,