3

ユーザーが入力したいくつかのフィールドを自動提案するアプリ (asp.net/c#) を作成しています。各ユーザーは、独自の自動提案リストを作成することになります。アイテムを追加するたびに、それが新しい単語であれば、gmail と同じように自動提案のリストに追加されます。

私は、ほとんどの人がこれについてどのように行っているのだろうかと思っていました。キーを押すたびにサーバーを呼び出すのはあまり効率的ではありませんか? ユーザーごとに 1 つのエントリを持つ巨大な xml ファイルを作成する必要がありますか? 各ユーザーのxmlファイル? これを効率的にするためにどのようにキャッシュしますか?

あらゆる種類の質問ですが、私が基本的に探しているのはベスト プラクティスです。ありがとうございました。

4

3 に答える 3

2

データ ストレージ
この情報はデータベースに保存する必要があります。ユーザーごと、フィールドごとに、このタイプの情報を保持するテーブルを 1 つまたは 2 つ作成します。

クライアント側クエリ
ユーザーがテキスト フィールドへの入力を開始すると、クライアント側から (AJAX を介して) データベースにクエリを実行できます。これを行う場合、サーバーに候補を照会する前に、フィールドに少なくとも 3 文字 (ish) が入力されるまで待機することをお勧めします。これにより、リクエスト数とクライアントとサーバー間のトラフィックがわずかに減少します。

この方法は、自動提案のヒットが多数発生する可能性のあるフィールドに使用します。

キャッシュ
この方法を使用すると、特定の状況で応答をキャッシュすることによってプロセスを最適化できます。

テキスト フィールドに 3 文字が入力された後にのみクエリが実行されると仮定すると、結果全体をキャッシュできます。テキスト ボックスにさらに文字を追加しても、返される結果の数は増えません。そのため、キャッシュされた結果をフィルタリングし続けることができます。ただし、ユーザーが文字を削除した場合は、キャッシュを更新して、最も適切な自動提案ヒットを利用できるようにすることができます。

サーバー側のプリロード
サーバー側では、このデータをすべて収集し、ページ要求とともに送信します。(テキスト フィールドのイベントで参照できる場所に JavaScript 配列としてプッシュ ダウンできonchangeます。この方法では、AJAX 呼び出しを行う必要はありません。

これは、可能性のある自動提案のヒット数が多くないフィールドには適しているようです。

于 2009-02-05T07:16:25.940 に答える
1

Chuck Norris は、JavaScript フレームワークによっては、サーバー呼び出しを行う前にクライアント側のチェックを構築して、フィールドに指定された数の文字または単語が記述されているかどうかを確認することを推奨しています。XML ファイルは、特定のユーザーがデータベースに入力した情報に基づいて、そのユーザーの自動提案語を使用して動的に生成される必要があります。

構築しようとしているアプリケーションによっては、特定のデータベース フィールドに対して全文 SQL クエリを実行する方が簡単な場合があります。パフォーマンスのために、おそらくクライアントのブラウザーによってキャッシュされる Cookie を作成し、アプリケーションで変更をチェックするか、完全なデータベース クエリを実行する前に存在するかどうかを確認することができます。

Chuck は、セッション変数の使用をお勧めしません。アプリケーションのパフォーマンスが低下するためです。これは、ユーザーごとにこれらの自動提案値をメモリに保持する必要があるためです。

チャックは、私の脳みそを明け渡す前に、他に何か必要かどうか知りたがっています。

于 2009-02-05T06:30:25.080 に答える
1

値をデータベース (おそらくユーザー プロファイルを保存している場所) に保存し、ユーザーがログインしたときに値を ASP.NET セッションにプルします。次に、セッションの値をオートコンプリート値に使用します。これにより、ログイン時にデータベースに 1 回アクセスするだけで済みます。

于 2009-02-04T17:13:52.300 に答える