私は最近、FAQのためにこのようなものを作成しました。あなたが直面する2つの最大の問題は次のとおりです。
- データベースの読み取り時間、DBで検索クエリを実行するのにかかる時間
- あなたの通話時間、誰かが1秒間に3文字を入力した場合、あなたは1秒間に3回のajax呼び出しを行っています。
非常に基本的な検索の場合、最初の問題はそれほど大きな問題ではありません。小さなテーブルをミリ秒単位で簡単にクエリできますが、大量のテキストを検索すると遅くなります。を乗り越えるための最良の方法は、SphinxやSolrのような検索エンジンを入手することです。それらは、データベースからのデータにインデックスを付けて、迅速で関連性のある検索を行います。
2番目の問題は、ユーザーのキーストロークの間に1秒未満の休憩がある場合(これは視聴者のコンピューターリテラシーによって異なります)、認識によって解決されます。つまり、わずかに一時停止した場合にのみ、ルックアップが実行されます。これは、クエリが少なくなり、システムへの負担が少なくなることを意味します。以下の例:
var typingTimer;
var doneTypingInterval = 1000;
$('.huge-input').stop().keyup(function(e){
if ((e.which <= 90 && e.which >= 48) || e.which == 8){
var myHugeInput = $(this);
clearTimeout(typingTimer);
typingTimer = setTimeout(
function(){
//Do the look up and set data
},
doneTypingInterval
);
}
});
したがって、ここでは、有効なキー入力の入力ボックスをチェックし、タイマーをクリアしてから、1000ミリ秒(1秒)のタイムアウトを設定します。時間がなくなると、検索を実行してデータを設定しますが、その秒の別の有効なキーストロークは、タイマーをクリアしてリセットします。
お役に立てれば。