1

データベースクエリであるリモートデータソースを使用しています。クエリの最大結果は 1000 です。「term」パラメータを使用して結果をフィルタリングしていますが、応答が遅いです。実際には 2 文字ではそれほど悪くはありませんが、1 文字を入力すると、戻るのにほぼ 3 秒かかります。YUIからjqueryに乗り換えました。同じデータソースを使用して、YUI でこれをはるかに高速に動作させました。レスポンスは1キャラで即答。これを行うより良い方法はありますか?以下のコード。

$(function() {

    $("#xContact").autocomplete({
        minLength: 1,
        source: "<$strLower(HttpWebRoot)$>data/employee_lookup.php",
        focus: function( event, ui ) {
            $( "#xContact" ).val( ui.item.label );
            return false;
        },
        select: function( event, ui ) {
            $( "#xContact" ).val( ui.item.label );
            return false;
        }
    })
    .data( "autocomplete" )._renderItem = function( ul, item ) {
        return $( "<li></li>" )
            .data( "item.autocomplete", item )
            .append( "<a>" + item.label + "<br><span style='font-size:0.8em'>" + item.desc + "</span></a>" )
            .appendTo( ul );
    };
});
4

1 に答える 1

1

これは、リモート データ ソースを処理するライブラリの問題だと思います

私の推理: ローカル データソースを使用して、MORE データを使用したまったく同じコードがあり、1 文字で即座にレンダリングされます。私はそれが私のリモートデータソースでもないことを知っています。クエリを実行するサーバー側のページを直接参照すると、結果が即座に表示されます。提案の 1 つは、結果ごとに DOM を操作しているため遅いというものでした。ローカル ソースに対しても同じことを行います。だから、私はその説明を買っていません。唯一の違いはソースです。そのため、リモート データ ソースの処理にはラグが必要です。リモートデータソースの結果を文字列に入れ、それをソースとして使用することを誰かが提案しました。私はそれをする必要はありません。それが機能する場合、jquery がリモート データソースを同じように処理しないことが証明されます。私のリモートデータソースがラグを引き起こしていないと仮定すると (そうではありません)、ローカルとリモートの間に違いはないはずです。最終的にはデータの配列です。したがって、問題はリモート データソースの処理および/またはレンダリングである必要があります。

私は同じリモート データソースで YUI を使用していましたが、リストを 1 文字で即座にレンダリングしていました。したがって、これはデータソースでもないことを証明しています。全体的に優れていると感じたので、jqueryに切り替えました。クエリを 250 レコードに制限しました。インスタントではありませんが、約1秒でレンダリングされています。

于 2012-05-08T23:34:38.607 に答える