решил проделать эксперимент, тестил в хроме:
<html>
<head>
</head>
<body>
<input type="button" value="простое обновление" onclick="up1();">
<input type="button" value="обновить спрятав таблицу" onclick="up2();">
<div></div>
<script>
var div = document.querySelector('div'), num = 1;
var trs = [];
for (var i = 0; i < 10000; ++i) {
trs.push('<tr><td>value1</td><td>value1</td><td>value1</td><td>value1</td></tr>');
}
div.innerHTML = '<table>' + trs.join('') + '</table>';
function update () {
var val = 'value' + (++num);
console.time('time');
var tds = div.querySelectorAll('td');
for (var i = 0, ln = tds.length; i < ln; ++i) {
tds[i].innerHTML = val;
}
console.timeEnd('time');
}
function up1 () {
update();
}
function up2 () {
div.style.display = 'none';
update();
div.style.display = 'block';
}
</script>
</body>
</html>
при 10000 данных отрабатывает на ура как при первом подходе так и при втором..