サイトでjqueryオートコンプリートを使用する予定で、テストバージョンを実装しました。今、文字入力ごとに文字列の新しいリストを取得するためにajax呼び出しを使用しています。問題は、新しいリストが作成される前に1.5秒遅れてしまうことです。オートコンプリートを高速化する最善の方法は何ですか?私はcakephpを使って、検索をして10項目の制限をしています。Jqueryオートコンプリートのパフォーマンスを向上させる方法
答えて
This article - 約flickrはどのように自動補完するのが非常に良いですか?私はそれを読んでいるいくつかの "うわー"の経験がありました。
「このウィジェットは、(これも10,000接点を持つ メンバーのために真である)200msの下 で、JavaScriptで、すべての連絡先 のリストをダウンロードします。 ために このレベルの性能を得るために、私たちは完全に のデータを サーバーからクライアントに送信する方法を再考しなければなりませんでした。
この場合の速度に関する実際の問題は、データベースでクエリを実行するのにかかる時間です。クエリの速度を向上させる方法がない場合は、検索結果を拡張して上位のランク付けされた結果を含むアイテムを追加すると、1文字おきに1つの検索を実行し、クライアント側で20〜30の結果をフィルタリングできます。
これはパフォーマンスの外観を改善する可能性がありますが、1.5秒で最初にクエリの速度を向上させようとします。
その他の情報をご提供いただければ、より具体的な回答を得ることができます。
幸運を祈る!
1.5秒間隔は、オートコンプリートサービスを提供するための非常に広いギャップです。
- まず、クエリとdb の接続を最適化します。メモリキャッシュを使用してdb接続を維持してください。
- サービスが再フェッチを無視するために高度に使用されている場合は、結果キャッシングメソッドを使用します。
- クライアントキャッシュ(JSリスト)を使用して、古いリクエストをクライアントに保存します。ユーザーが入力して消去しても、それは有用になるでしょう。バックエンドポイントの代わりにフロントエンドキャッシュから結果が得られます。
- クライアント側での正規表現フィルタリングにはコストがかかりませんが、その可能性はあります。
いくつかの最適化を行う前に、まずボトルネックの位置を分析する必要があります。各ステップ(入力→要求→dbクエリ→レスポンス→表示)の所要時間を調べてみてください。おそらく、CakePHPの実装では、入力されたすべての文字に対してリクエストを送信しないようにする遅延があります。
PHP/SQLではサーバサイドが遅いです。
PHP/SQLは使用しないでください。私のオートコンプリートはC++で書かれており、ハッシュテーブルを使って検索します。掲載結果はhereです。
これはCeleron-300コンピュータ、FreeBSD、Apache/FastCGIです。
これは、巨大な辞書ですばやく実行されることがわかります。 10,000,000レコードは問題ではありません。
また、優先順位、動的翻訳、およびその他の機能もサポートしています。
オートコンプリート自体は遅くはありませんが、実装は可能です。まずチェックするのは、遅延オプションの値です(jQueryドキュメントを参照してください)。次に、私はあなたの質問をチェックするでしょう:10レコードを戻すだけかもしれないが、それらの10レコードを得るために巨大なテーブルスキャンをしていますか?あなたは、データベースからレコードの大量をコレクションに持ち帰り、データベース上でサーバー側のページングを行う代わりにコレクションから10個のアイテムを取っていますか?簡単なインデックスが役立つかもしれませんが、確かめるためにいくつかのテストを行う必要があります。
オンザフライでクエリを実行する代わりにリストオブジェクトをプリロードしてみてください。
また、オートコンプリートにはデフォルトで300msの遅延があります。
おそらく1.5秒でオートコンプリートの待機時間を(つまり、それはあなたが追加の文字を入力していないことを確認するために待機する時間です)含まれています遅延
$(".selector").autocomplete({ delay: 0 });
+1の遅延。私はこれが理由の1つであることを忘れていました。私はなぜデフォルトの遅延時間が300ミリ秒だが0ミリ秒ではないか分からない。 –
あなたの質問がうまくいけば、ここでも+1してください。 クエリが10個のリスト項目に長時間かかる場合、クエリに何か問題があり、これは必要な答えではありません。 – Ligemer
遅延オプションのデフォルト値を指定する公式のJQuery https://api.jqueryui.com/autocomplete/#option-delay –
- 1. オートコンプリートのパフォーマンスを向上させる方法
- 2. jqueryのパフォーマンスを向上させる方法
- 3. パフォーマンスを向上させる
- 4. パフォーマンスを向上させる
- 5. ネットワーク上でMYSQLのパフォーマンスを向上させる方法
- 6. SQL Server 2005のクエリのパフォーマンスを向上させる方法
- 7. MyISAMのINSERT/UPDATEクエリのパフォーマンスを向上させる方法
- 8. このDML文のパフォーマンスを向上させる方法は?
- 9. ビットマップ描画のパフォーマンスを向上させる方法
- 10. クエリのパフォーマンスを向上させる方法
- 11. アプリケーションのパフォーマンスを向上させる方法
- 12. purePDFのパフォーマンスを向上させる方法は?
- 13. AndroidでWebviewのパフォーマンスを向上させる方法は?
- 14. IIS/ASP.Netの起動パフォーマンスを向上させる方法
- 15. .net wcfサービスのパフォーマンスを向上させる方法
- 16. Jenkinsサーバーのパフォーマンスを向上させる方法は?
- 17. Microsoft SQL Server:ダムクエリのパフォーマンスを向上させる方法
- 18. SQL Serverストアドプロシージャのパフォーマンスを向上させる方法?
- 19. アプリケーションのパフォーマンスを向上させる簡単な方法
- 20. ajax対応ウェブサイトのパフォーマンスを向上させる方法は?
- 21. DataTable.Load()のパフォーマンスを向上させる方法
- 22. ASP.NETアプリケーションのパフォーマンスを向上させる
- 23. エンティティフレームワークのパフォーマンスを向上させるクエリ
- 24. CALayerフィルタのパフォーマンスを向上させる
- 25. ClojureScriptプログラムのパフォーマンスを向上させる
- 26. 検索のパフォーマンスを向上させる
- 27. ボックスシャドーのパフォーマンスを向上させる
- 28. LEFT JOINのパフォーマンスを向上させる
- 29. SSLハンドシェイクのパフォーマンスを向上させる
- 30. Javaプログラムのパフォーマンスを向上させる
を削除しますか? – Powerlord
このクエリはどのように見えますか? 10アイテムの1.5秒はばかげて遅いです。 SOLRについての私の他のコメントを参照してください。何百万行もの行がある私たちの魅力のように働いていました。 – Ligemer
最高の改善...選択したjqueryプラグインを使用してください! –