3

従来の ASP で生成された約 600 行のテーブルをループする document.ready で呼び出される関数があります。「最新の」ブラウザー (Chrome、Firefox、IE9 Beta) では、1.5 ~ 2 秒未満で実行されます。IE6 では、約 5 ~ 7 秒で実行され、あまり良くありません。

基本的に私がやっていることは、特定の列のセルの値を追加して小計を出すことです。(これはサーバー側で生成する必要があることはわかっていますが、ビューを呼び出すビュー、ビューを呼び出すビュー、ビューを呼び出すビューを使用してこれを開発した頭脳派もいます...)。

私は IE9 のプロファイラーを使用して、ボトルネックがどこにあるかを把握しようとしましたが、jQuery の find と each が呼び出されたときに最も深刻なようです。

tr.find("td").each(function() {
&
tr.find("td").eq(ci).html(tot).css

必要に応じてすべてのコードを投稿しますが、名前のないテーブルの行とセルをループするより効率的な方法はあるのでしょうか?

テーブルは次のようになります。

32     47       0/0 0 8 1 1                 
32     47  -7   0/0 0 0   7 
Totals     -7   0/0   8 1 8  
32     47       0/0 0 2 1 1                 
32     47  -7   0/0 0 3   7 
Totals     -7   0/0   5 1 8  

テーブルの行をループし、(td:first) = "Totals" が見つかった場合は、現在の tr と前の 2 つの tr を変数に配置し、セルを取得して合計を計算し、それらの合計を適切なセルに配置します。 .

これはすべて機能しますが、私が言ったように、find と each の間に深刻なボトルネックがあります。

4

1 に答える 1

4

自分でテストしたことはありませんが、すべての jQuery 拡張機能が速度を低下させている可能性があります。プレーンな JavaScript でこれを実行してみて、速度が向上するかどうかを確認してください。

var rows = document.getElementById('your-table').rows;
var num_rows = rows.length;
for (var i = 0; i < num_rows; ++i) {
    var cells = rows[i].cells;
    if (cells[0].innerHTML == 'Totals') {
       var num_cells = cells.length;
       for (var j = 1; j < num_cells; ++j) {
           cells[j].innerHTML =
               (parseInt(rows[i-2].cells[j]) || 0) +
               (parseInt(rows[i-1].cells[j]) || 0);
       }
    }
 }
于 2010-11-18T21:56:36.383 に答える