Цикл jQuery по производительности TableRows / Table Cells - PullRequest
3 голосов
/ 19 ноября 2010

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

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

Я использовал профилировщик 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  

Я перебираю строки таблицы, и если я нахожу (td: first) = "Totals«Затем я помещаю текущий tr и два предыдущих tr в переменные, затем беру ячейки и вычисляю итоги, и помещаю эти итоги в соответствующие ячейки.

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

1 Ответ

4 голосов
/ 19 ноября 2010

Я не проверял это сам, но возможно, что все расширения 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);
       }
    }
 }
...