在我们的 Web 应用程序中,用户可以进行需要更新大量数据库表的更改。所有这些的加载时间最长可达 30 秒。我不希望用户在导航到另一个页面之前等待该操作完成。
我已将长时间运行的代码放在自己的页面上(例如“updateinfo.aspx”),并尝试了一些解决方案,包括对“updateinfo.aspx”的 jQuery AJAX 调用或加载调用“updateinfo.aspx”的图像文件。在所有情况下,当“updateinfo.aspx”执行时,我无法从启动 AJAX 调用的原始 HTML 页面导航到另一个 HTML 页面。 Chrome 表示对“updateinfo.aspx”的请求正在等待处理。当我单击链接以离开原始 HTML 页面时,我们会“等待 example.org...”,直到 AJAX 页面完成,然后导航到下一个 HTML 页面的请求将完成,新页面也会随之出现。负载。
因此,这违背了将长时间运行的代码放入 AJAX 页面的目的。用户的页面呈现速度很快,但在 AJAX 页面完成之前,他们无法通过导航到另一个页面来继续他们的一天。我不关心 AJAX 页面的输出。
有什么想法吗?
您不应该真正在网页上下文中执行长时间运行的进程;当客户端应用程序是 Web 浏览器时,HTTP 请求/响应模型不利于该概念。这是我不得不多次解决的一个场景;你可以: -
- 使用MSMQ;向队列提交一条消息,其中包含要执行的操作的详细信息,或者
- 将要执行的操作的详细信息写入“作业”表
然后,您可以创建一项 Windows 服务来从队列中读取消息/从表中一次提取一个未处理的项目,并执行长时间运行的操作。
在最近的项目中,我必须根据记忆执行此操作,我创建了一个位于标头(即母版页中)的用户控件,该控件每 15 秒通过 jQuery Ajax 轮询一次数据库表以检测作业何时完成,并且向用户显示一个弹出窗口,指示作业已完成。
我可以尝试在某处挖掘一些例子,但这些是主要的移动部分,这有帮助吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)