我正在开发一个小型Web实用程序,它显示来自某些数据库表的一些数据.
我在FF,Safari,Chrome上运行的实用程序很好……但是IE8上的内存管理是可怕的.最大的JSON请求将返回信息,以在浏览器中的表中创建大约5,000行(表中的3列).
我正在使用jQuery来获取数据(通过getJSON).要删除旧/现有表,我只是在做一个$(‘#my_table_tbody’).empty().要在表中添加新信息,在getJSON回调中,我只是将我正在创建的每个表行附加到变量,然后一旦我拥有它们,我使用$(‘#my_table_tbody’).append( myVar)将它添加到现有的tbody中.我不会在创建表行时添加它们,因为这似乎比只是一次添加它们要慢得多.
是否有人建议有人应该做什么试图向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;).
感谢所有的回复.我很遗憾你们都愿意提供帮助.
最佳答案
var tmpText = [];
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.push('anything you want')
tmpText.push( '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';)
}
$('#main_area').html(tmpText.join(''))
}
你不需要document.getElementById(‘main_area’).innerHTML =”;
这个方法是推入数组,然后加入并使用jquery html函数进行更新.这是我所知道的最快的方法.对不起这里的格式 – 这是我的第一篇文章,我想我会在这里回复一下stackoverflow.