前言:
我有一个以简单方式工作的网络应用程序:
用户单击第 1 页上的按钮。这将提交第 2 页的 POST 请求。
第 2 页需要 1-2 分钟才能在后端检索数据。
Page 2 后端将计算出的 HTML 发送到浏览器,需要一段时间(10-30 秒)才能呈现。
这里明显的可用性问题是,当在第 1 步中单击按钮时,用户必须坐在那里,而网页似乎什么也没做(浏览器显示它正在连接到状态栏上的第 2 页,但大多数用户没有没有注意到);然后它将第 1 页的内容替换为一个 EMPTY 页面,该页面也坐在那里似乎什么也没做,而内容正在被渲染并且 DOM 是从一个大型数据集构建的。
我撇开上述解决方案经过精心设计,需要适当地重新设计以:(1)利用 AJAX 检索数据;和/或 (2) 以较小的(人类可消费的)块检索数据,并根据需要逐步加载更多数据。由于资源限制,没有这样的重新设计,我正在尝试应用以下性质的快速而肮脏的可用性修复:
A. 单击第 1 页上的按钮后,用户会看到一个模式弹出窗口,上面写着“正在处理和重新加载数据。这可能需要大约 3 分钟才能完成”。
B. 重要的是,模式弹出窗口应该在第 2 页加载开始时持续存在(或者至少可以无缝地重新创建)。
问题:
构建这种模式弹出窗口的“最佳实践”方法是什么?
显然,单独实现#A 是微不足道的(页面 1 上的弹出窗口将一直持续到来自页面 2 的 HTTP 响应到达客户端并且页面 2 开始渲染替换页面 1)。
但是,当第 2 页到达时,保存/重新克隆此弹出窗口的最佳方法是什么?这里的两个问题是尽可能地实现从 HTTP 响应之前的弹出和之后的弹出的无缝过渡;更重要的是,避免必须等待完整的第 2 页呈现(在显示弹出窗口之前等待 30 秒)。
澄清:
任何建议的方法都不应该是 AJAX。例如,所做的任何事情都必须包含在第 2 页的 HTTP 响应发送的相同 HTML 内容中。
我正在寻找一般技术指针,不一定是示例代码。“使用
window.onload
处理程序来执行此操作”的顺序(显然错误的答案正确性)。理想情况下,该解决方案应该使用纯 Javascript,但如果存在使用 jQuery 或 YUI 的更好解决方案,我会考虑它。