angularjs - 使用单页应用程序(SPA)时如何在不刷新浏览器的情况下处理过期文件?

标签 angularjs single-page-application

我已经使用 Angularjs 完成了一个完整的单页应用程序 (SPA) 应用程序。

到目前为止一切顺利。

众所周知,所有的 JavaScript 文件都是在第一次访问时加载的。或者,某些文件在需要时以惰性模式样式加载。

到目前为止一切顺利...

情况是:服务器更新了所有文件(html 部分、javascript、css),而客户端仍然保留着许多过时的文件。

这可以通过刷新浏览器、按 F5 键、control+f5 或浏览器中的刷新按钮来解决。但在使用 SPA 时,这个概念不存在。

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

我可以以某种方式检测到(也许可以进行 ping)并重新加载该特定文件。使用 document.write 策略。但现在出现了另一个问题,我有一个 javascript 文件,其中所有 javascript 都被缩小了。

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

但是重新加载是一个丑陋的解决方案,想象一下客户端因为不幸服务器刚刚更新而丢失了表单中的所有数据。更糟糕的是,我现在必须创建一些“自动保存”功能,因为这个。

我不知道如何处理这个问题,如果可能的话,以“Angular 方式”进行。

我想知道 google gmail 如何处理这个问题,因为我保持登录状态很多个小时,但没有登录。

最佳答案

正如其他人已经建议的那样,让登录用户使用旧版本的网络应用程序。

不仅你所要求的在 Angular 中很难做到,而且还可能导致糟糕的用户体验和令人惊讶的行为,因为用户使用旧版本和新版本所做的事情之间可能没有映射版本提供。 View 可以被删除、重命名、分割或合并。同一 View 的行为可能已更改,并且在不通知用户的情况下这样做可能会导致错误。

您以 Gmail 为例,但可能已经注意到,用户界面的更改总是在您注销后发生,而不是在您使用它时发生。

首先,如果你的应用是办公时间使用的内网网站,就趁没人使用的时候更新吧。这是一个更简单的解决方案。

否则,如果您需要提供 24/24 可用性,我的建议是:

  • 部署新版本的 SPA 时,使旧版本与新版本并行,将当前用户保留在旧版本上,并将新用户登录到新版本上。根据您的设置,可以通过多种方式实现此目的,但这并不难。

  • 保留旧版本,直到您确信没有人仍在使用它,或者您非常确定新版本没问题并且不需要回滚到旧版本。

  • 后端服务应向后兼容旧版本的前端。如果不可能,您也应该保留多个版本的后端服务。

关于angularjs - 使用单页应用程序(SPA)时如何在不刷新浏览器的情况下处理过期文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18772363/

相关文章:

reactjs - 将 React SPA 与 hotjar 热图跟踪集成

single-page-application - 如何将 Durandal.js 配置为在同一个文件夹中拥有多个具有 View 和 View 模型的区域?

angularjs - ionic 调用服务

angularjs - 如何使用 AngularJS 最小化不断变化的网站样式变化

javascript - 通过 UserManager 使用服务时,User 为 Null

asp.net - .Net Core 2 Spa 模板与 Angular Material

reactjs - 如何在不丢失状态的情况下处理来自 SPA 中 OpenID Connect 流中身份提供者的重定向

javascript - Angular POST 到 Node 服务器

javascript - 如何在javascript中将日期mm/dd/yyyy转换为yyyy-mm-ddT00 :00:00. 000Z格式

javascript - 在 AngularJS Controller 之间共享数据,但共享数据来自 Ajax 调用