2010-11-18 4 views
3

document.readyで呼び出される関数は、従来のASPで生成された約600行のテーブルをループします。 「現代的」なブラウザ(Chrome、Firefox、IE9 Beta)では1.5-2秒で動作します。 IE6では約5〜7秒で動作します。jQueryのTableRows/Table Cellによるループパフォーマンス

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

私は、ボトルネックがどこにあるの感覚を取得しようとするIE9のプロファイラを使用し、時にjQueryの検索最も深遠であるように思われ、各が呼び出される:

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 

Iループと私は(TD:最初の)発見した場合=「合計」を、私は、変数に現在のTRと、前の2つのtrのを置きますセルをつかんで合計を計算し、それらの合計を適切なセルに配置します。

これはすべて動作しますが、私が見つけたときには深刻なボトルネックがあります。

答えて

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); 
     } 
    } 
} 
+0

私は朝に/この夜、それを試してみて、私の調査結果を報告します...ありがとう! – wali

+1

+1 - 'rows'と' cells'プロパティはテーブルの反復を高速化するのに最適です。私が追加できるのは、現在の行と現在のセルを各 'for'ループにキャッシュすることだけです。これらのプロパティの検索が追加されます。 – user113716

+0

...実際には、それはちょうど行になると思う。セルではありません。 – user113716

関連する問題