Я разрабатываю небольшую веб-утилиту, которая отображает некоторые данные из некоторых таблиц базы данных.
У меня утилита работает нормально на FF, Safari, Chrome ..., но управление памятью в IE8 ужасно. Самый большой запрос JSON вернет информацию, чтобы создать около 5000 строк в таблице в браузере (3 столбца в таблице).
Я использую jQuery для получения данных (через getJSON). Чтобы удалить старую / существующую таблицу, я просто делаю $('#my_table_tbody').empty()
. Чтобы добавить новую информацию в таблицу, в обратном вызове getJSON я просто добавляю каждую строку таблицы, которую я создаю, к переменной, а затем, как только они у меня есть, я использую $('#my_table_tbody').append(myVar)
, чтобы добавить ее к существующему телу. , Я не добавляю строки таблицы, поскольку они создаются, потому что это кажется намного медленнее, чем просто добавление их всех сразу. * +1007 *
Есть ли у кого-нибудь рекомендации о том, что должен делать кто-то, кто пытается добавить тысячи строк данных в DOM? Я хотел бы держаться подальше от нумерации страниц, но мне интересно, если у меня нет выбора.
Обновление 1
Вот код, который я пробовал после предложения innerHTML:
/* Assuming a div called 'main_area' holds the table */
document.getElementById('main_area').innerHTML = '';
$.getJSON("my_server", {my: JSON, args: are, in: here}, function(j) {
var mylength = j.length;
var k =0;
var tmpText = '';
tmpText += /* Add the table, thead stuff, and tbody tags here */;
for (k = mylength - 1; k >= 0; k--)
{
/* stack overflow wont let me type greater than & less than signs here, so just assume that they are there. */
tmpText += 'tr class="' + j[k].row_class . '" td class="col1_class" ' + j[k].col1 + ' /td td class="col2_class" ' + j[k].col2 + ' /td td class="col3_class" ' + j[k].col3 + ' /td /tr';
}
document.getElementById('main_area').innerHTML = tmpText;
}
В этом суть. Я также попытался использовать только запрос $ .get и заставить сервер отправлять отформатированный HTML, и просто установить его в innerHTML (т. Е. document.getElementById('main_area').innerHTML = j;
).
Спасибо за все ответы. Я поражен тем фактом, что вы все готовы помочь.