在执行大型操作时向视图发送更新的策略



这对你们中的许多人来说可能是一个非常简单的策略,但我一直在努力找出一个策略,在服务器执行耗时操作时将更新呈现到视图。

事实就是这样。我有一个视图,它有一个按钮,上面写着"批准"。这个批准需要调用一些Action或某种后台进程来执行可能需要20-30秒的繁重操作。

在那段时间里,我想用一些处理gif动画的方式更新视图,并附加文本,比如"执行操作A"、"执行操作B"等等

实现这一目标的最佳策略是什么?

这里有一个你可能不喜欢的答案:甚至不用费力从服务器获取一些"进度更新"。

从商业角度来看这项任务。提供一些反馈的目的是给用户一些温暖而模糊的感觉,即他们没有被遗忘,他们要求计算机完成的任务没有被放弃。提供此功能时,您愿意承担多少成本?

最简单的这种设备就是简陋的进度条。尽管大多数经验丰富的用户不相信它会告诉他们任务何时完成,但他们仍然相信,如果它移动,就会发生

我的解决方案是向服务器发布一个异步操作来启动操作。然后显示一个完全由javascript管理的进度条。它开始得很快,但随着进展速度减慢,以至于它永远不会真正完成,但似乎正在取得一些进展。当异步操作完成时,将进度条短暂显示为已完成,然后将其删除。

其他解决方案的成本要高得多,但这种方法的好处即使不是负面的,也几乎可以忽略不计,毕竟它们实施起来很复杂,更容易出错。

我必须承认我没有尝试过,但我愿意尝试。

我认为SignalR可能是一个不错的尝试。

虽然这在理论上听起来不错,但我会将其作为后台操作,然后在任务完成时通过电子邮件或短信向用户发送通知。

否则你需要

  • 在服务器上设置一个缓存(不是asp.net缓存)来存储长时间运行的进程的当前状态
  • 设置一个js计时器来轮询服务器
  • 使用缓存中存储的当前状态更新ui

并非不可能,但有很多活动部件。

最新更新