2017-09-06 4 views
0

データベースに何千ものアイテムがあり、jQueryオートコンプリートのようなオートコンプリートを使用して検索可能にしたいとしますが、各キーと同様にajaxを使用したくありませんを押すと、データベースへの要求が行われます。jqueryオートコンプリート機能を使用するサーバーへのリクエストが多すぎます

私はアヤックスせずに、このいずれかを使用することができます。

$(function() { 
    var availableTags = [ 
     "ActionScript", 
     "AppleScript", 
     "Asp", 
     "BASIC", 
     "C", 
     "C++" 
    ]; 
    $("#tags").autocomplete({ 
     source: availableTags 
    }); 
    }); 

しかし、私が何千ものアイテムを持っている場合、これもサーバとウェブサイトのスピードに影響しますか?

は、それが最初にすべてのレコードを取得し、seprateファイルにそれらを配置し、サーバー上のウェブサイトは、より迅速かつより少ない負荷にするために、それはそこに形成検索することが賢明ですか?

+3

あなたは、各キーの押下後にリクエストを行う必要はありません。タイピングが0.5秒程度停止した後にのみリクエストが行われるようにイベントをデバウンスする必要があります。また、データストアが適切に構成されている限り、任意のサーバーは数千のレコードを検索することができます。あなたの後者の解決策として、それはおそらく遅く実行され、要求に応じてサーバーを停止させます。 –

+0

とAJAXコールが結果の行数を確認し、あまりにも多くのデータを返すことを防ぐために。特定の最大値を下回った場合にのみ、これらの結果で応答します。あるいは、結果をランク付けし、最も可能性の高いものだけを表示することもできます。 –

+0

あなたは、すべてのレコードを1回または毎日ファイルに保存することによって、検索のプロセスも遅くなるでしょうか? @RoryMcCrossan –

答えて

2

もしあなたが何千ものレコードを持っているなら、もちろんajaxを使う必要があります。そうしないと、クライアント側でたくさんのデータが読み込まれ、盗んだり、読み込み中。

ザ・リクエストを削減するには、2つの方法があります。

がデバウンス

デバウンスが要求を行う前に、Xミリ秒を待つだけのタイマー、あるを実装します。このタイマーが終了する前にユーザが何かを入力すると、それをキャンセルして別のタイマーを開始します。

ダウンサイド:デバッグ時間を微調整する必要があるため、ユーザーは少し遅れを感じることはありません。

が要求

をキャンセルあなたはすべてのキーを押して上の要求をトリガすることができますが、他のキーが押された場合は、前の要求をキャンセルします。要求がまだ完了していない可能性があるため、サーバーの負荷が軽減される可能性があります。

ダウンサイド:ユーザーがサーバー応答時間より速い場合、サーバーの負荷が軽減されます。リクエスト

あなたは上記の技術の両方を組み合わせる場合は感知できない遅延を持っているデバウンス時間を短縮し、またユーザーの種類ならば、保留中の要求を取り消すことができるので、あなたは、良い結果を持っていますキャンセルとデバウンスを組み合わせる

ゆっくり。

関連する問題