加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 使用单页面应用程序(SPA)时如何处理过期文件而不刷

发布时间:2020-12-17 08:06:02 所属栏目:安全 来源:网络整理
导读:我已经使用Angularjs完成了一个完整的单页应用程序(SPA)应用程序。 到现在为止还挺好。 任何人都知道,所有的javascript文件都是在第一次访问时加载的。或者,有些文件在需要时以懒模式加载。 到现在为止还挺好… 情况是:服务器更新所有文件(html partials
我已经使用Angularjs完成了一个完整的单页应用程序(SPA)应用程序。

到现在为止还挺好。

任何人都知道,所有的javascript文件都是在第一次访问时加载的。或者,有些文件在需要时以懒模式加载。

到现在为止还挺好…

情况是:服务器更新所有文件(html partials,javascripts,css),客户端仍然有很多文件过时。

这将简单地解决刷新浏览器,点击F5键,控制f5或浏览器中的刷新按钮。但是,在使用SPA时,这个概念不存在。

我不知道如何解决这个问题。

我可以以某种方式检测(做一个ping可能),只是重新加载该特定的文件。使用document.write策略。但是现在又出现了一个问题,我有一个单一的javascript文件,所有的javascript都被缩小了。

我可以尝试在浏览器中强制重新加载,或强制重新登录(并重新加载,因为登录是SPA部分)。

但重新加载是一个难看的解决方案,想像客户端丢失所有数据的形式,因为他是不幸的服务器刚刚更新。更糟的是,我现在必须创建一些“自动保存”功能,因为这样。

我不知道如何处理这个,如果可能的话,以“有角度的方式”做。

我不知道谷歌Gmail如何处理这个,因为我保持登录了很多小时没有登录。

其余的人说一个解决方案可以是版本化你的文件。因此,每当浏览器检查这些文件时,浏览器会注意到文件与服务器中的文件不同,以便浏览器缓存新文件。

我建议使用一些构建工具,如gulp,grunt或webpack,最后一个变得越来越受欢迎。

到目前为止,我使用gulp作为我的项目。我正在移动到webpack

如果您对gulp感兴趣,您可以查看gulp-rev和gulp-rev-replace插件。

他们在做什么?

让我们说我们在你的项目app.js中有下一个文件,将gulp-rev应用到你的项目之后你得到的是像app-4j8888dp.js那样的app.js注入的html文件仍然指向app.js,所以你需要更换它。为此,您可以使用gulp-rev-replace插件。

例如。 gulp任务在哪里

var gulp = require('gulp');
var rev = require('gulp-rev');
var revReplace = require('gulp-rev-replace');
var useref = require('gulp-useref');
var filter = require('gulp-filter');
var uglify = require('gulp-uglify');
var csso = require('gulp-csso');

gulp.task("index",function() {
  var jsFilter = filter("**/*.js",{ restore: true });
  var cssFilter = filter("**/*.css",{ restore: true });
  var indexHtmlFilter = filter(['**/*','!**/index.html'],{ restore: true });

  return gulp.src("src/index.html")
    .pipe(useref())      // Concatenate with gulp-useref
    .pipe(jsFilter)
    .pipe(uglify())             // Minify any javascript sources
    .pipe(jsFilter.restore)
    .pipe(cssFilter)
    .pipe(csso())               // Minify any CSS sources
    .pipe(cssFilter.restore)
    .pipe(indexHtmlFilter)
    .pipe(rev())                // Rename the concatenated files (but not index.html)
    .pipe(indexHtmlFilter.restore)
    .pipe(revReplace())         // Substitute in new filenames
    .pipe(gulp.dest('public'));
});

如果您想了解更多详情,请参阅下面的链接。

https://github.com/sindresorhus/gulp-rev
https://github.com/jamesknelson/gulp-rev-replace

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读