質問

私のウェブサイトの高度な検索画面には、オートコンプリートフィールドが必要なフィールドが約15個あります。
それらのコンテンツはすべて互いの値に依存します(したがって、一方が入力された場合、他方のコンテンツは最初の値に応じて変化します)。
ほとんどのフィールドには膨大な可能性があります(少なくとも1000のエントリ)。

ユーザーが0.5秒間入力を停止した場合、現在ajax呼び出しを行います。このajax呼び出しは、私のLuceneインデックスへの迅速な呼び出しを行い、多数のJSonオブジェクトを返します。メソッド自体は非常に高速ですが、接続とデータの転送が遅すぎるのです。

他のサイト(facebookなど)を見ると、それらのオートコンプリートはすぐに実行されます。 HTMLに可能な値を入れているので、往復する必要はありません。しかし、処理するデータの量には不安があり、これはオプションではありません。

アイデアはありますか

役に立ちましたか?

解決

  1. 上位xの結果のみを返します。
  2. ユーザーが何を選んでいるかについていくつかの傾向を把握し、 そしてそれに基づく順序、できれば 自動的に。
  3. すべてのURLの結果をキャッシュ&キーストロークの組み合わせ、 往復する必要がないように すでに結果を取得している場合 前。
  4. このキャッシュをすべてと共有する 同じURLを使用するオートコンプリート &キーストロークの組み合わせ。
  5. もちろん、 のgzip圧縮を有効にします JSON、および設定していることを確認してください 一部のキャッシュするキャッシュヘッダー 時間。時間は料金によって異なります オートコンプリートレスポンスの変更。
  6. JSONを最適化して送信します 最低。送らないでください 必要のないもの。

他のヒント

可能性のすべての結果を返すか、jsonオブジェクトとして上位10個のみを返しますか。

多くの人が多くの結果を画面に送り返しますが、最初の数人だけを表示します。少数の結果を送り返すことにより、データ転送を削減できます。

先頭の「X」を返すリスト全体ではなく、結果の数を減らしてオプションを削減しますか?また、ユーザーがリストから選択したものを追跡するためにトレンドを入れて、トップの「X」を試してみることもできます。最も使用されている/最も関係のあるもの。常に最も関連性の高いリストを最初に返してから、まだ苦労している場合は完全なリストを返してください。

結果のセットを上位Xセットに制限することに加えて、AJAX要求の応答でキャッシュを有効にすることを検討してください(GETを使用し、URLをシンプルに保つことを意味します)。

ユーザーがバックスペースして、まったく同じコンテンツを再入力する頻度は驚くべきものです。また、パブリックおよびサーバー側のキャッシングを許可することにより、全体的なラウンドトループ時間を短縮できます。

  • System.Web.Cacheに結果をキャッシュする
  • Luceneキャッシュを使用する
  • IEはこれをキャッシュするため、POSTではなくGETを使用します
  • 結果のサブセットのみを取得する(人々が示唆するように10)
  • YUIウィジェット
  • のような適切なサードパーティのオートコンプリートウィジェットを試してください。

上位Nエントリを返すことは良いアプローチです。ただし、データを all 返す必要がある場合は、送信するデータとJSONオブジェクト自体を制限しようとします。

たとえば:

"長い名前を持つThis Here Company" 「This Here Company ...」になります。 (名前のクライアント側にドットを置きます-繰り返します;最小限のデータを転送します)。

そして、JSONオブジェクトに関する限り:

{n: "This Here Company", v: "1"}

...ここで" n"名前と" v"値になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top