2011-10-13 17 views
6

私は適度に大きいJSONオブジェクト(1.2メガバイト)を使用して、2つのテストケースを有する:第一にjQueryのオートコンプリート機能としてソースプロパティ(){}非常に遅い

source: data 

source: function (request, response) { 
       response(data); 
      } 

をオートコンプリートが期待通りに機能するかどうか

2番目のケースでは、オートコンプリートが動作することがあり、非常に遅いです。 3秒から4秒間ブラウザがハングして「応答しない」場合があります。

最初のケースと比較して2番目のケースではどういうことが起こっていますか?

(私はいくつかの時点でこの機能にいくつかのフィルタリングロジックを入れていますが、今のところ私はこのようにテストしています)。

答えて

5

データセットはローカルオブジェクトとして渡すときにフィルタリングされますが、コールバックを使用するときはフィルタリングされません(プログラマの責任になります)。

source: dataオートコンプリートを使用して、あなたのために結果セットをフィルタリングします。

response($.ui.autocomplete.filter(array, request.term)); 

何のフィルタリングは、そのため、あなたのページには、JSONの1.3メガバイトのためのマークアップを生成している適用されていないコールバックsource: function(request, response) { response(data) }を使用します。

ローカルソースからデータを読み込むときにオートコンプリートがデータをキャッシュします。リモートから取得された場合、デフォルトではキャッシュされません。

このjQuery UIオートコンプリートのドキュメントでは、動作を説明し、リモート呼び出しのキャッシングを実装する方法を提案しています。

http://jqueryui.com/demos/autocomplete/#remote-with-cache

+0

あなたは、コールバックを使用して、リモート・データ・ソースとして扱われていることを示唆していますか? –

+0

申し訳ありませんが、私はあなたの質問に誤解しました。私は正解であると信じている更新を投稿します。 –

+0

ありがとう、ジェレミー。それは私の質問に優れた答えです。 –