1

オートコンプリート スクリプトのパフォーマンスを改善する必要があります。私が必要としているのは、入力ボックスの elementID をクリックすると、search.php からの選択のリストが入力されることjson_encodeです。次のスクリプトが機能しています。しかし、入力ボックスをクリックするたびに、リストが生成されるまでに時間がかかります。

("#elementID")
.autocomplete({
  source: function(request, response) {
    $.ajax({
      url: "search.php",
      dataType: "json",
      success: function(data){
        response(data[0]);                                  
      }
    });
  },
  minLength: 0,
  delay: 0,
  select: function(event, ui){
    $(this).val(ui.item.value);
  },
  change: function( event, ui ) { //remove if not click from drop down
    if (!ui.item) {
      $(this).val("");
    }
   }                            
})      
.click(function() {  //Click to activate
  $( "#elementID" ).autocomplete("search", " ");
});     

search.php で

   $ocidb ->strTable     = "table";
   $ocidb ->strField     = "column1";
   $ocidb ->strCondition = "coulmn1 is not null";
   $result                = $ocidb->ORASelectRecord();
   echo json_encode(filter_unique_array($result, 'coulmn1'));
   return;

自分のやり方が正しいのか、それとも別の適切な方法があるのか​​知りたいですか?

4

1 に答える 1

1

まず、速度低下の原因がどこにあるかを確認する必要があります。Chrome デベロッパー ツールで [ネットワーク] タブに移動し、オートコンプリート リストの読み込みにかかる時間を確認します。

Chrome デベロッパー ツール

これにより、問題がサーバー側にあるのかクライアント側にあるのかがわかります。時間または待ち時間が 300 ミリ秒を超える場合は、サーバーの待機が非常に顕著である可能性があります。次に、サーバー側のコードをベンチマークして、ボトルネックがどこにあるかを確認することをお勧めします。コードから、PHP コードではなくデータベースで一意性を強制したい場合があります。

サーバーがすぐに応答する場合、問題は JavaScript にある可能性があります。別のオートコンプリート ライブラリを探すか、DOM 要素を毎回再作成するのではなくキャッシュするようにしてください。

一般に、典型的なシナリオでは、ある種のキャッシュと場合によってはプリフェッチ (ユーザーが要求する前に結果の初期セットをロードする) が役立ちます。

于 2013-05-02T01:36:54.493 に答える