2010-11-18 2 views
3

У меня есть функция, вызываемая document.ready, которая проходит через таблицу с примерно 600 строками, которая была сгенерирована в классическом ASP. В «современном» браузере (Chrome, Firefox, IE9 Beta) он работает менее 1,5-2 секунд. В IE6 он работает примерно через 5-7 секунд, а не хорошо.jQuery Looping Through TableRows/Table Cells Performance

В основном, что я делаю, это добавление значения ячеек в определенные столбцы и предоставление промежуточных итогов. (Я знаю, это должно быть сгенерировано на стороне сервера, но некоторые brainiac разработали это, используя представления, которые вызывают представления, которые называют представления, которые называют представления ...).

Я использовал профайлер 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: первый) = «Итоги», то я помещаю текущий тр, и два предыдущих ТР в переменных , затем захватить ячейки и рассчитать итоговые значения и поместить эти итоговые значения в соответствующие ячейки.

Все это работает, но, как я уже сказал, есть серьезная шея бутылки во время поиска и каждого.

ответ

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