1

jQuery UI オートコンプリート機能を実装しましたが、顕著なパフォーマンスの問題が発生しています。

もともと、入力された文字ごとに新しいクエリを送信していました(ただし、最低3文字は入力する必要があります)。

私のデータベースはインデックス化されており、50,000 行のデータ (5 列) があります。DB レベルでのパフォーマンスの問題はありません。

私が試してみることにした 1 つの手法は、JSON をキャッシュし、オートコンプリートをデータベースではなく JSON にポイントすることでした。これは完璧に機能しました...最大2000行程度です。それを超えると、遅くて不安定になります。

誰かがテクニックに関する推奨事項を持っているなら、私はそれを感謝します.

Javascript の概念を示すコードを次に示します。

// First, setup some data to iterate over. 
// My thought is to query the DB once, and build this list in memory to avoid autocomplete hitting the database each keystroke.        

var data = []; 
    data.push({value: "Person 1", label: "Person 1"});
    data.push({value: "Person 2", label: "Person 2"});

$("#searchBox").autocomplete({
    source: data;
    minChars: 3;
    delay: 0;
});
4

2 に答える 2

2

50k行!!!! ネットワークはほぼ間違いなくあなたのボトルネックです。TOPまたはLIMITを使用します(使用しているデータベースがわかりません)確かに、ユーザーは50,000件の結果をスキャンすることはなく、入力を続けている間に最初の10件を戻すだけです。

編集

ああ、あなたの質問を読み間違えました。テーブルには5万行ありますが、5万行を返しているわけではありません。しかし、2k行をキャッシュすることに言及しているので... TOPで結果を制限し、遅くなるまで上に進んで、適切なトレードオフを見つけてください

于 2012-09-14T21:38:32.277 に答える
0

サーバー側でDBを使用せず、すべてのインデックスをフラットファイルに保存し、クライアントに「回答ウィンドウ」のみを送信します。

私のソリューションを使用できます。ここでソースを取得してください: http://enumer.org/ac-dist.tgz

これは非常に迅速に機能し、巨大な辞書を処理します: 1,000 万件以上のレコードは問題ありません。

Unix ライク OS 上の FastCGI モジュールを使用して、Apache WEB サーバーで動作します。私のデモは、古いマシンである Celeron-300 DeskPro で動作します。このハードウェアは、ご覧のようにすばやく動作するのに十分です。

C++ で記述されたサーバー部分、クライアント: JavaScript+Ajax。

ソースコードはリクエストに応じて無料です。

于 2013-06-30T18:26:49.213 に答える