1

我正在尝试加快 MVC Web 应用程序中搜索结果的返回速度。如果用户搜索一个短语,然后直接搜索另一个短语,我想取消原始搜索,或者实际上取消结果的呈现,因为这需要时间。

编辑:搜索框实时搜索,因此如果您输入具有大量结果的内容,例如“the”,然后快速将其更改为更具体的内容,则原始搜索会保留最新的搜索结果。

我最初认为数据库交互是瓶颈(因此我的问题是在此处取消数据库搜索请求),但开销是在部分视图中呈现所有结果:

SearchContoller有这种形式:

public ActionResult Search(string query, string time) {

    // Go off and do search, returning results

    return PartialView("SearchResults", results);
}

如果在Search第一次渲染时再次使用控制器方法PartialView,我可以以某种方式取消原来的方法吗?例如,在视图中,如果该标志设置在其他地方,我可以检查一个标志并取消吗?

看法:

@model SearchResultModel

@if (Model.ResultType1.Count > 0) {
  <h2>Results 1</h2>
    <dl>
      <dt>Results:</dt>
        @foreach (var result in Model.Results1) {
           if (FlagInControllerToStopThis) break; // OR SOMETHING SIMILAR??
        <dd> <!--Each result is returned here--></dd>
      }
    </dl>
}
4

1 回答 1

2

为什么不将搜索框呈现为不可见,然后在其中包含一些 jQuery 代码documentReady()来显示文本框?如果没有结果,则立即显示,但如果有很多,则在返回页面时无法使用。

从理论上讲,用户可以使用另一个屏幕进行另一个查询,但我认为这可能超出了问题的范围。

编辑下面给出的评论

如果您使用的是 MVC 4,您可以使搜索方法异步,请参阅这篇文章了解如何做到这一点。ManualResetEvent然后,如果正在搜索的代码可以查看它是否已设置并自行停止,则可以使用类似 a 的东西来取消它。

于 2013-05-01T12:08:34.260 回答