2

ajax 呼び出しから受け取った値をマッピングしています。これはかなりうまく機能しますが、ie7 ではまだ十分に高速ではありません (遅いスクリプトの警告が表示されます)。

これを高速化する方法がわかりません。ネイティブの JavaScript 関数も使用してみましたが、速度の向上はごくわずかでした。何かアイデアはありますか?

var $audit = $('#audit');

$.each(data, function (i, val) {

    if (val != null && val !== '0') {

        $audit.find('input[type="checkbox"].' + i).attr('checked', val == 1);
        $audit.find('input[type="text"].' + i).val(val);
        $audit.find('select.' + i).val(val);
    }

});

いくつかの疑似 HTML:

<div id="audit">
    <input type="text" class="foo1" />
    <input type="checkbox" class="foo2" />
    <select class="foo3">
        <option value="1">1</option>
    </select>
</div>
4

3 に答える 3

2

それがそれほど役立つかどうかはわかりませんが、「同じ」要素を何度も見つけるのではなく、入力をキャッシュして選択し、それをフィルタリングして、特定の要素をはるかに小さなコレクションでフィルタリングすることができます。

var $audit = $('#audit'),
    $inputs = $audit.find('input, select');

$.each(data, function (i, val) {
    if (val != null && val !== '0') {
        var current = $inputs.filter('.' + i);
        if(current.is(":checkbox") {
            current.attr('checked', val === 1);
        } else {
            current.val(val);
        }
    }
});
于 2012-11-05T12:19:09.040 に答える
1

反復ごとに、スコープ チェーンが DOM に出入りし続けると速度が低下することはそれほど驚くことではありません。ただし、ループに時間がかかるため、疑問が生じます。ページにこれらの div がいくつあるか? 約 50 を超える場合は、UI デザインに問題があります。

これを大幅に高速化するには、コードを根本的に再設計する必要があります。私だったら、繰り返しの div を JavaScript 文字列として含む HTML Framgent を作成し、それを単一の createElement/innerHTML の設定を使用してページにスプライスします。

于 2012-11-05T12:40:43.320 に答える
1

用途に合わせてお試しいただけknockout.jsます。それはより速いかもしれません。

これはデータ バインディングの例です: http://knockoutjs.com/examples/controlTypes.html

于 2012-11-05T12:19:46.813 に答える