Webサイトでのオートコンプリートの応答性を高める手法
-
05-07-2019 - |
質問
私のウェブサイトの高度な検索画面には、オートコンプリートフィールドが必要なフィールドが約15個あります。
それらのコンテンツはすべて互いの値に依存します(したがって、一方が入力された場合、他方のコンテンツは最初の値に応じて変化します)。
ほとんどのフィールドには膨大な可能性があります(少なくとも1000のエントリ)。
ユーザーが0.5秒間入力を停止した場合、現在ajax呼び出しを行います。このajax呼び出しは、私のLuceneインデックスへの迅速な呼び出しを行い、多数のJSonオブジェクトを返します。メソッド自体は非常に高速ですが、接続とデータの転送が遅すぎるのです。
他のサイト(facebookなど)を見ると、それらのオートコンプリートはすぐに実行されます。 HTMLに可能な値を入れているので、往復する必要はありません。しかし、処理するデータの量には不安があり、これはオプションではありません。
アイデアはありますか
解決
- 上位xの結果のみを返します。
- ユーザーが何を選んでいるかについていくつかの傾向を把握し、 そしてそれに基づく順序、できれば 自動的に。
- すべてのURLの結果をキャッシュ&キーストロークの組み合わせ、 往復する必要がないように すでに結果を取得している場合 前。
- このキャッシュをすべてと共有する 同じURLを使用するオートコンプリート &キーストロークの組み合わせ。
- もちろん、 のgzip圧縮を有効にします JSON、および設定していることを確認してください 一部のキャッシュするキャッシュヘッダー 時間。時間は料金によって異なります オートコンプリートレスポンスの変更。
- 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"値になります。