質問

サイトでjqueryオートコンプリートを使用する予定で、テストバージョンを実装しました。私は現在、ajax呼び出しを使用して、すべての文字入力の新しい文字列リストを取得しています。問題は、新しいリストが作成される1.5秒前にかなり遅くなることです。オートコンプリートを高速にする最良の方法は何ですか?私はcakephpを使用して、検索を実行し、10個のアイテムを制限しています。

役に立ちましたか?

解決

この記事- flickr がどのようにオートコンプリートを行うかについては、非常に読みやすいです。いくつかの「すごい」がありました。読んだ経験。

  

"このウィジェットは、すべてのリストをダウンロードします   JavaScriptで、連絡先の   200ミリ秒未満(これは   10,000以上の連絡先を持つメンバー)。に   このレベルを得るために   パフォーマンス、私たちは完全に   からデータを送信する方法を再考する   サーバーからクライアントへ。"

他のヒント

オンザフライでクエリを実行する代わりに、リストオブジェクトをプリロードしてみてください。

また、オートコンプリートにはデフォルトで300ミリ秒の遅延があります。
おそらく遅延を削除する

$( ".selector" ).autocomplete({ delay: 0 });

1.5秒間隔は、オートコンプリートサービスを提供するための非常に広いギャップです。

  1. 最初にクエリとデータベースを最適化する 接続。データベース接続を維持してみてください メモリキャッシュを使用して生きています。
  2. 次の場合、結果キャッシュメソッドを使用します サービスは再フェッチを無視するために非常に使用されます。
  3. クライアントキャッシュ(JSリスト)を使用して、古いリクエストをクライアントに保持します。ユーザーが入力し直して消去すると、便利になります。結果は、バックエンドポイントではなくフロントエンドキャッシュから取得されます。
  4. クライアント側での正規表現フィルタリングはコストがかかりません。チャンスを与えることができます。

いくつかの最適化を行う前に、まずボトルネックの場所を分析する必要があります。各ステップ(入力→要求→ dbクエリ→応答→表示)にかかる時間を調べてください。たぶん、CakePHPの実装には、入力されたすべての文字に対してリクエストを送信しない遅延があります。

この場合の速度の本当の問題は、データベースでクエリを実行するのにかかる時間だと思います。クエリの速度を向上させる方法がない場合は、検索を拡張していくつかの高いランクの結果を持つアイテムを含めることができます.1文字ごとに1つの検索を実行し、クライアント側で20-30の結果をフィルタリングできます。

これによりパフォーマンスの外観が改善される可能性がありますが、1.5秒で最初にクエリ速度を改善しようとします。

それ以外に、さらに情報を提供していただければ、より具体的な回答を提供できる場合があります。

がんばって!

PHP / SQLのサーバー側が遅い。

PHP / SQLを使用しないでください。私のオートコンプリートはC ++で記述されており、ハッシュテーブルを使用して検索します。パフォーマンスについては、こちらをご覧ください。

これはCeleron-300コンピューター、FreeBSD、Apache / FastCGIです。

そして、おわかりのように、巨大な辞書をすばやく実行します。 10,000,000レコードは問題ありません。

また、優先度、動的翻訳、およびその他の機能もサポートしています。

オートコンプリート自体は遅くありませんが、実装は確かに遅くなります。最初に確認するのは、遅延オプションの値です(jQueryのドキュメントを参照)。次に、クエリを確認します。10個のレコードだけを戻す場合がありますが、これらの10個のレコードを取得するために大規模なテーブルスキャンを実行していますか?データベースから大量のレコードをコレクションに戻し、データベースでサーバー側のページングを行う代わりに、コレクションから10個のアイテムを取得しますか?単純なインデックスが役立つ場合がありますが、確認するにはテストを行う必要があります。

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