在用户不刷新时更新 Web 应用程序
Updating web applications when users don't refresh
在我的工作中,我为Web应用程序编写代码,因此新代码将相对频繁地推送到服务器。但是,我们遇到了一个问题,该应用程序的某些用户倾向于一次在浏览器窗口中将其打开长达几天。然后他们遇到这个问题,其中:
- 他们将数据输入到上周仍在其计算机上运行的应用程序中。 他们
- 尝试保存他们的数据,这有时不起作用,因为服务器上的代码比本地机器上的代码更新(即,他们客户端上的JavaScript发送的数据与服务器上的新代码所期望的不同)。
- 他们不能简单地刷新页面来重新下载已更改的 JavaScript 代码,否则他们会丢失数据。
处理这种情况的正确方法是什么?我当然想到了显而易见的解决方案,比如告诉这些用户不要这样做,或者永远不要更改我的 AJAX API,这样请求就不会失败,但我希望有更好的方法来解决这个问题。
特别是,我们的环境由服务器上的PHP,客户端上的JavaScript和用于管理源代码的git组成。我并不特别担心支持旧版本的IE等(至少关于这个问题)。
我通过不断轮询脚本来解决此问题,该脚本在服务器上轮询revision.txt
或类似内容,该脚本中有一个版本号,该版本号在每次部署时都会递增。
当版本更改时,我要么弹出一条消息,显示他们需要刷新/禁用 UI 或强制刷新它们(这通常很恶心,可能会让他们生气)。
像这个概念:
var createVersionChecker = function(seconds) {
var version = null;
var checkVersion = function() {
$.get('/version.txt', function(response) {
if(version == null) {
version = response;
return;
}
if(version != response) {
// do some logic to show the user that they need to refresh
// or force refresh them.. ick!
}
});
};
setInterval(checkVersion, seconds * 1000);
};
createVersionChecker(60);
我会尽量减少从客户端传递到服务器的数据中的重大更改。现在,我并不是说你不能对 API 进行更改;只是所做的任何更改通常都应该与以前的版本向后兼容。通常,这意味着如果 API 端点采用某些参数并且您想要更改它们,如果可能的话,您应该
- 忽略你不关心的参数(当你删除了一个必要的参数,但旧的客户端仍在结束它);和
- 为未提供的数据提供合理的默认值(用于添加参数时)。
类似的事情也适用于从服务器发回的数据:客户端应该忽略它无法识别的内容,并在没有得到预期的东西时应用合理的默认值。这本质上就是稳健性原则:"在发送的内容中要保守,在接受的内容上要自由。
当然,这不是一个光滑的解决方案,但如果做得好,它可以很好地工作并使您的软件更加健壮。
虽然不能替代适当的健壮性,但您可能还需要考虑提供一些version
标签以及所有响应。如果用户刚刚保存完一些数据(因此可以安全地刷新),并且收到的version
与客户端脚本中嵌入的version
不同,则刷新页面并非不合理。但这并不能替代稳健性。
- Web应用程序,将成员状态更新为其他成员
- Web 驱动程序管理器更新错误:EACCES,权限被拒绝
- 如何在不按ctrl+F5的情况下更新我的Web应用程序(chrome、mozilla、IE8+)更改
- 更新网页上Web服务器程序的实时输出
- "Gmail风格”;web表单的部分更新
- Web开发(SpringMVC),浏览器更新缓慢
- ASP.NET Web API 控制器更新行
- Appgyver 类固醇,Web 视图中更新的对象不会显示
- 在用户不刷新时更新 Web 应用程序
- Cordova应用程序自动同步/更新Web内容(.js文件),如果更新版本可用,否则使用缓存版本
- KnockoutJs 更新视图模型可从 Json Web 服务中观察到
- 如何每 n 分钟使用数据更新一次 Web 应用程序
- 需要哪种体系结构才能允许多个 Web 应用协同工作,这些应用可以单独更新
- 在不重新加载的情况下更新 Web 应用代码
- 在javascript更新后,从web用户控件获取codebehind中的asp:TextBox文本属性
- 如何更新从web服务恢复的Xml文件
- Windows Phone 7 Web浏览器更新太慢
- 如何更新web探查器工具栏以显示有关ajax请求的数据
- Ajax结果不自动更新Web网格MVC 4
- 在客户端(GWT)更新web应用程序的最佳实践