【发布时间】:2010-03-02 05:03:02
【问题描述】:
假设我们有一个需要 20 秒才能运行的数据库查询(用户通过在浏览器中单击 HTML 页面上的按钮来运行它)。 用户变得不耐烦,仅在 10 秒后刷新浏览器,才运行新的查询。
如何停止第一个正在运行的数据库查询(或阻止第二个运行)?
谢谢
【问题讨论】:
假设我们有一个需要 20 秒才能运行的数据库查询(用户通过在浏览器中单击 HTML 页面上的按钮来运行它)。 用户变得不耐烦,仅在 10 秒后刷新浏览器,才运行新的查询。
如何停止第一个正在运行的数据库查询(或阻止第二个运行)?
谢谢
【问题讨论】:
第一步是优化该查询,20 秒对于大多数查询来说太长了。用户通常不会容忍这种糟糕的性能。
【讨论】:
如果这是使用 Ajax,请禁用 开始查询的按钮,直到 查询完成后。
当用户发出请求时,设置一个 在用户会话中标记,然后 在单独的线程上启动查询。 如果他们尝试再次提交,请检查 标志,并简单地忽略 要求。查询完成后, 重置标志。虽然查询是 运行时,浏览器可以轮询 服务器正在等待结果。
【讨论】:
我不是专家,但您可以在他的会话中存储他上次提交查询的时间。如果同一用户在 20 秒内提交另一个查询,则忽略它。
但这并不是真正的蛮力方式。
【讨论】: