このアプリケーションは、管理者が特定のユーザーとして認証する方法を提供します。
認証するユーザー名を入力するためのテキストフィールドが表示されます。
4文字以上入力した場合
残念ながら、短いユーザー名(3文字以下)のユーザーもいます。したがって、「patrizio」と入力すると、「patrizio」のオートコンプリートリストが表示されますが、ユーザーalを知っていて「al」と入力すると、リストに表示されません。
データベースにユーザー "al"がいないという誤った印象を人々に与えていませんか?
-編集-
解決策はおそらく次のようになります:
最初の文字から検索します。
なんらかの理由ですべての結果を読み込めない場合は、さらに多くの結果があることをユーザーに示すことができます。このようなもの:
download bmml source – Balsamiq Mockups で作成されたワイヤーフレーム
そうすれば、数行だけをロードするので、妥当なロード時間を得ることができます。同時に、ユーザーはさらに入力することが理にかなっていることがわかります。
何も読み込まないのは直観に反します。ロードするものがないことを示しています。これは、ユーザーを混乱させる可能性がある本当に悪い状況です。
はい!それは直感に反しています。これが1文字のユーザー名を許可するWebサイトでは、ユーザーが入力する最初の文字からチェックを開始する理由です。
これはTwitterが行うことと似ています。
=============================================
短い文字と長い文字の機能的な動作を変更しないでください。この場合、常にプレフィックスマッチングを使用します。つまり、オートコンプリートコンポーネントのデフォルトの動作です デフォルトの動作 、およびユーザーはすでにそれに慣れています。
データを入力する人が同じ場合は、入力の種類ごとに機能を変更しないでください。これはユーザーを混乱させます。
違いは、Google検索では上位n件の推奨/人気の提案のみが表示されるのに対し、ユーザーでは一致するユーザーの完全なリストが表示されることを期待していることです。
1つの文字から始まる文字が複数ある場合は、Googleの処理を正確に実行し、文字の数に基づいて結果を並べ替えることができます。
あなたの例では、AlとAlisterとALiがあるかもしれませんが、ユーザーがAlを入力すると、オートコンプリートはAlで始まる上位10件のレコードをプルし、Al、ALiとAlisterなどにソートしようとします。この場合、 DBからの数が少ない場合、パフォーマンスは影響を受けず、短いユーザー名が一番上にソートされます。
長いユーザー名のみを照合するというあなたの解決策は、間違った端からの結果が多すぎるというパフォーマンスの問題を修正しようとしていると思います。
代わりに私が提案するのは、結果の数を制限することです。つまり最初の10件の一致のみを表示します(おそらく、結果の総数を使用してそれ自体を正しく表示し、ユーザーが実際に下にスクロールした場合、10以上の結果をレイジーロードします)。
これには、同じプレフィックス一致を持つユーザー名がこのリストを遅くすることもできないという利点もあります(大企業がすべてのユーザーに「acme_jane」のような名前でサインアップして、acmeの内部ジェーンと簡単に一致させることができると想像してください) .com電子メールアドレス)。
最近使用した名前を何らかの好みで表示するかどうかも検討する価値があります。例えば。管理者が毎週「acme_stuart_alastair」のアカウントのロックを解除する必要がある場合、パスワードを忘れてしまうため、「ac」と入力すると、最初の2回の後にエントリがすでに表示されているといいでしょう。たとえば、これを行うには、一番上に最新のユーザー一致を3つまで表示し、次にセパレーターを表示し、次にその下の完全なユーザーリストから7つ一致するものを表示します。
私の答えは、ユーザーエクスペリエンスではなく、セキュリティに焦点を当てています。
ユーザー名をオートコンプリートしないでください。
システムに存在するユーザー名を明らかにすることは、あなたが犯すことができる最も基本的な間違いの1つです。
登録プロセスでは、確かに、ある時点で、必要なユーザー名がすでに使用されていることをユーザーに認めなければならない場合があります。ただし、3桁の文字を入力してユーザーのリストを配信するだけの場合よりも、(ロボットの場合でも、特にレート制限を追加する場合)億兆回の試行を列挙するのにはるかに時間がかかります。
つまり、簡単に言うと、直感的かどうかにかかわらず、これをしないでください。