1

MVC Web アプリで検索結果が返される速度を上げようとしています。ユーザーが 1 つのフレーズを検索し、その後すぐに別のフレーズを検索する場合、元の検索をキャンセルするか、現実的には時間がかかるため、結果のレンダリングをキャンセルします。

編集:検索ボックスはリアルタイムで検索するため、「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

documentReady()検索ボックスを非表示にして、テキスト ボックスを表示するためのjQuery コードを含めてみませんか? 結果がない場合はすぐに処理されますが、多い場合はページが返されたときに使用できません。

理論的には、ユーザーは別の画面を使用して別のクエリを実行できますが、それは質問の範囲を超えている可能性があると思います。

以下のコメントを編集

MVC 4 を使用している場合は、検索メソッドを非同期にすることができます。その方法については、この記事を参照してください。ManualResetEvent検索していたコードが設定されているかどうかを確認して停止できる場合は、 のようなものを使用してそれをキャンセルする可能性があります。

于 2013-05-01T12:08:34.260 に答える