Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在IE中使用Javascript/jQuery管理大型数据集最有效的方法是什么?_Javascript_Jquery_Internet Explorer - Fatal编程技术网

什么';在IE中使用Javascript/jQuery管理大型数据集最有效的方法是什么?

什么';在IE中使用Javascript/jQuery管理大型数据集最有效的方法是什么?,javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,我有一个返回JSON的搜索,然后将其转换为Javascript格式的HTML表。它重复调用jQuery.append()方法,每行调用一次。我有一台现代化的机器,Firefox的响应时间是可以接受的。但在IE8中,速度慢得令人无法忍受 我决定将从数据到HTML的转换转移到服务器端PHP中,将返回类型从JSON更改为HTML。现在,我不再重复调用jQuery.append(),而是对整个表调用一次jQuery.html()方法。我注意到Firefox的速度变快了,但IE的速度变慢了 这些结果都是轶

我有一个返回JSON的搜索,然后将其转换为Javascript格式的HTML表。它重复调用jQuery.append()方法,每行调用一次。我有一台现代化的机器,Firefox的响应时间是可以接受的。但在IE8中,速度慢得令人无法忍受

我决定将从数据到HTML的转换转移到服务器端PHP中,将返回类型从JSON更改为HTML。现在,我不再重复调用jQuery.append(),而是对整个表调用一次jQuery.html()方法。我注意到Firefox的速度变快了,但IE的速度变慢了


这些结果都是轶事,我没有做过任何基准测试,但IE的性能非常令人失望。我能做些什么来加速IE中大量数据的处理,还是用AJAX/Javascript一次性处理大量数据是个坏主意?

我以前做过这件事。由于每次添加后都会触发重新绘制/回流过程,所以所有DOM操作都会减慢速度

在客户端将其构建为字符串,使用
.html()
将字符串插入DOM


这对我来说非常成功,即使在IE6上也是如此。

多个DOM追加操作会降低性能。您也可能会遇到字符串不变性的问题

保持数据尽可能小(JSON数组很好),并在脚本中构建html,避免javascript字符串连接问题。将html值附加到数组中,然后加入数组。创建html后执行一次DOM追加。乙二醇

var builder = [];

//Inside a loop
builder.push('<tr><td>');
builder.push(json.value);
builder.push('</tr>');

//Outside the loop
$('div').append(builder.join(''));
var-builder=[];
//圈内
建筑商推送(“”);
builder.push(json.value);
建筑商推送(“”);
//圈外
$('div').append(builder.join('');
我强烈建议

几个月来,我一直在使用John Resig的微模板功能。模板插件就是这个插件的发展。我一年来一直在写和介绍:)


正如其他人所提到的,过度的DOM操作会降低性能。使用前面提到的Array.join(“”)创建HTML字符串并使用jQuery.HTML()方法设置容器的innerHTML要快几个数量级。小心使用jQuery.append(html)-这相当于先创建所有DOM节点,然后插入它们

问题是,即使您优化了页面节点树的创建,对于非常大的数据集,您仍然会很快达到上限。浏览器无法处理如此大而复杂的DOM树。即使使用事件委派,您也会看到交互(动画、处理程序等)速度减慢。如果数据集确实很大,则需要进行某种虚拟化,以仅显示视口中可见的内容(这就是SlickGrid所做的-)

或者,您可以通过对DOM添加进行分块,并在超时的情况下逐个执行这些添加,中间有一些停顿,让浏览器处理用户事件,从而提高页面的响应能力和“交互时间”


其他技术包括渲染第一页的数据,为更多数据分配空间,但仅在用户开始向其滚动时渲染。这就是Facebook所做的。

这是真的-对于大数据集,你永远不会从IE(<9)中获得好的性能,但是设置innerHTML通常比在IE中插入一堆DOM节点要快得多,不管你使用的是什么JS框架。你完全正确。。。但是“你在视口中吗?”有多快?我想你是指检查滚动位置。检查本身相当快,特别是如果你把它放在一个小的超时。请看一看SlickGrid的例子——网格渲染了50000行,但速度非常快,响应速度也非常快。我刚刚完成了SlickGrid的实现,这真是太棒了。毫无疑问,这是我使用过的最强大的jQuery插件,它使我不用重新设计一大块项目来处理IE。谢谢@很高兴你发现它很有用。