我已经使用 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/