1

検索エンジンの全選択機能を作成する Google Chrome 拡張機能を持っていますが、遅いです (1 ~ 14 秒、250 ~ 1000 件の結果)。これを行うより高速な方法はありますか? 私のコードは以下の通りです:

var dropdownvalue = dropdown.options[dropdown.selectedIndex].value;
if ((dropdownvalue == "createFullCheckboxes") || (dropdownvalue == "createNameCheckboxes")) {
    var div_embed1 = document.getElementById('results-pane');

    if (div_embed1) {
        div_embed1.innerHTML = '<form id="checkbox-form">' + div_embed1.innerHTML + '</form>';
    }

    var i;
    var x = document.getElementsByClassName('name');

    for (i = 0; i < x.length; i++) {
        x[i].innerHTML = '<input id="checkbox" type="checkbox">' + x[i].innerHTML + '';
    }

    checkedAll();
    return;
}​

for ループを次のように変更してみましfor (var i = 0, len = x.length; i < len; i++){たが、20ms しか違いがありませんでした。CheckedAll()すべてのチェックボックスを選択するだけの関数です。

選択されたチェックボックスをループし、実際にすべて選択を機能させる他の部分 (図示されていません) は、92 ミリ秒とはるかに高速であり、1000 件の結果でも高速です。

これはクロム開発ツールからの抜粋です:

タイミングのスナップショット

ありがとうございました。

4

1 に答える 1

1

私はテストします:

var x = document.getElementsByClassName('name');
var h = '<input class="checkbox" type="checkbox">';
var i = x.length;
while(i--){ x[i].innerHTML = h + x[i].innerHTML; }

等しいテストは、より小さいテストよりも高速である必要があります。

Duffs Device を試してみてください:(マークアップのレンダリングと悪影響を与える可能性のあるプロトタイプのプロパティがわからないため推測です)(ID の重複を避けるために id= を削除したことに注意してください) クラスに置き換えてください)

function process(xi, h) {
    xi.innerHTML = h + xi.innerHTML;
}
var x = document.getElementsByClassName('name');
var h = '<input class="checkbox" type="checkbox">';
var iterations = Math.floor(x.length / 8);
var leftover = x.length % 8;
var i = 0;

if (leftover > 0) {
    do {
        process(x[i++], h);
    } while (--leftover > 0);
}

do {
    process(x[i++], h);
    process(x[i++], h);
    process(x[i++], h);
    process(x[i++], h);
    process(x[i++], h);
    process(x[i++], h);
    process(x[i++], h);
    process(x[i++], h);
} while (--iterations > 0);
于 2012-05-17T15:19:34.070 に答える