【问题标题】:Progressive Enhancement for long-running tasks长期运行任务的渐进增强
【发布时间】:2010-11-02 14:14:07
【问题描述】:

我正在寻找改进启动长时间运行(>2 分钟)服务器端任务的网页的方法。当前版本的页面只在任务的整个持续时间内计时,这对用户来说可能非常令人沮丧。

我已经有了一些关于如何改善用户体验的想法,但它们都会在某种程度上涉及 AJAX 的使用。由于我之前在这个项目上的经验,我知道并非所有用户都启用或使用 JavaScript。

假设服务器端流程已经尽可能优化,我还能做些什么来尽可能改善所有用户的体验?

【问题讨论】:

  • 您是否考虑过添加一项服务来卸载这些长时间运行的任务?然后,您的网页可以简单地启动该过程,然后(如果您的最终用户的 javascript 允许)轮询该服务以获取进度。这将使您能够在不中断任务的情况下继续提供页面并改善用户体验。

标签: asp.net ajax progressive-enhancement


【解决方案1】:

将长时间运行的服务器进程移到带外。

当用户启动任务时,应用程序可以将消息写入某种队列;这通常非常快,因此用户可以快速获得控制权。消息排队后,另一个专门的进程(服务、计划任务、cron 作业等)会在第一时间获取并执行适当的任务。

对于启用了 javascript 的用户,您可以设置一个计时器来通过 AJAX 检查任务的状态,并在任务完成时提醒他们。

您可以通过在您的页面上一个常见的可见位置显示他们的待处理和已完成任务,让您的非 JavaScript 用户了解他们的信息。当然,他们必须继续浏览才能从中受益,因此您还需要明确指出,如果用户在等待任务完成,他们应该偶尔刷新页面。

【讨论】:

  • 我真的很喜欢在他们继续浏览时显示任务完成的想法。很好的建议,谢谢!
  • 您也可以为非 JavaScript 用户使用 标签。我个人尽量避免刷新,但是对于这样的事情,在用户没有javascript的情况下,我认为每15秒左右刷新一次页面以更新状态是合适的。
【解决方案2】:
  • 在数据库(或内存对象)中创建表
  • 长时间运行的任务将更新此表(对象)中的进度
  • 网页将显示来自该表(或对象)的数据。如何刷新页面 - 这是您的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多