Узкое место тут в первую очередь
jQuery. Нужно уменьшить число запросов к элементам через
jQuery. А то получается, что у вас при сортировки для каждой итерации происходит маленький ад :-)
Возможно, если вы сделаете сортировку, сформируете новый набор данных и затем замените им старые данные, работать будет быстрее.
Вот небольшой пример:
https://jsfiddle.net/alekseynemiro/q3tsw3bt/1/var data = [];
// получаем данные из таблицы в массив
$('tr', 'table>tbody').each(function(index, row) {
var cells = $('td', row);
var sum = 0;
var items = [];
for (var i = 0; i < cells.length; i++)
{
if (i == cells.length - 1)
{
cells[i].innerHTML = sum / 5;
items.push(sum / 5);
}
else
{
sum += parseInt(cells[i].innerHTML, 10);
items.push(parseInt(cells[i].innerHTML, 10));
}
}
data.push(items);
});
// сортируем массив
data.sort(function (a, b) {
return a[5] - b[5];
});
// создаем новую таблицу на основе массива
var html = '<table><thead><tr>';
html += '<th>price</th><th>price</th><th>price</th>';
html += '<th>price</th><th>price</th><th>avrg</th></tr></thead>';
html += '<tbody>';
for (var i = 0; i < data.length; i++)
{
html += '<tr>';
for (var j = 0; j < data[i].length; j++)
{
html += '<td>' + data[i][j] + '</td>';
}
html += '</tr>';
}
html += '</tbody></table>';
// выводим таблицу (перезаписываем старую)
$('#content').html(html);
Набросал еще вариант со счетчиком и с
50 000 строками, но счетчик показывает неправильное время, видимо на отрисовку данных в браузере уходит больше времени.