IE8中的Jqgrid treegrid性能问题

IE8中的Jqgrid treegrid性能问题,jqgrid,Jqgrid,我正在使用jqgrid treegrid在expand事件上远程加载数据。它正在快速检索数据,但在客户端加载需要时间,而且在折叠节点时,它在IE8上发出停止脚本错误。在FF和Chrome上,它确实需要时间,但不会出现任何脚本错误。我只有480条记录要显示,但treegrid显示了巨大的性能缺陷。正在折叠2012年2月节点时出现IE8错误 我测试了您的演示,我有一个技巧可以显著提高性能。原因包括: 和内部: 这些行使用$t.grid.bDiv作为jQuery上下文参数。因此,可以搜索$t.grid

我正在使用jqgrid treegrid在expand事件上远程加载数据。它正在快速检索数据,但在客户端加载需要时间,而且在折叠节点时,它在IE8上发出停止脚本错误。在FF和Chrome上,它确实需要时间,但不会出现任何脚本错误。我只有480条记录要显示,但treegrid显示了巨大的性能缺陷。正在折叠2012年2月节点时出现IE8错误


我测试了您的演示,我有一个技巧可以显著提高性能。原因包括:

和内部:

这些行使用
$t.grid.bDiv
作为jQuery上下文参数。因此,可以搜索
$t.grid.bDiv
fill中的数据,而不使用现有的ID索引。如果网格没有重复的id(这将是数据中的错误),可以删除
$t.grid.bDiv
参数

与您最初的演示相同,但我使用了函数的固定代码,将上面的行替换为

$(“#”+$.jgrid.jqID(id)).css(“display”,“display”);

$(“#”+$.jgrid.jqID(id)).css(“显示”、“无”);
我使用了原始的jqGrid 4.1.1
jquery.jqGrid.min.js
,但只使用了
expandRow
collapseRow
函数重写了代码

$.jgrid.extend({
expandRow:函数(记录){
这个。每个(函数(){
var$t=此;
if(!$t.grid |!$t.p.treeGrid){return;}
var childern=$($t).jqGrid(“getNodeChildren”,记录),
//if($($t).jqGrid(“isVisibleNode”,记录)){
扩展=$t.p.treeReader.expanded_字段;
$(儿童)。每个(功能(i){
var id=$.jgrid.getAccessor(这个$t.p.localReader.id);
//$(“#”+id,$t.grid.bDiv).css(“display”,“display”);
$(“#”+$.jgrid.jqID(id)).css(“display”,“display”);
如果(此[扩展]){
$($t).jqGrid(“expandRow”,this);
}
});
//}
});
},
collapseRow:功能(记录){
这个。每个(函数(){
var$t=此;
if(!$t.grid |!$t.p.treeGrid){return;}
var childern=$($t).jqGrid(“getNodeChildren”,记录),
扩展=$t.p.treeReader.expanded_字段;
$(儿童)。每个(功能(i){
var id=$.jgrid.getAccessor(这个$t.p.localReader.id);
//$(“#”+id,$t.grid.bDiv).css(“显示”、“无”);
$(“#”+$.jgrid.jqID(id)).css(“显示”、“无”);
如果(此[扩展]){
$($t).jqGrid(“collapseRow”,this);
}
});
});
}
});
我认为可以进一步提高代码的性能,但至少简单的更改可以显著提高折叠或扩展包含许多项的树节点的性能

更新:我刚刚发布了修复jqGrid主代码中上述问题的方法。我决定使用
$($t.rows.namedItem(id))
而不是上面描述的$(“#”+$.jgrid.jqID(id))。我没有准确地衡量性能,但的使用应该最接近原始jqGrid代码,我希望它作为jQuery的id选择器工作得更快一些


更新2:修复程序现在位于github上jqGrid的主代码中(请参阅)

Oleg:非常好!非常感谢你。现在的表现肯定好多了…@varaprakash:不客气!我看到TreeGrid的当前代码可以进一步改进以获得更好的性能,但我希望我找到了您遇到的瓶颈。我花了大约10分钟找到问题并解决它。写答案花了更多的时间:-)。无论如何,你可以在这个例子中看到,完整的工作演示重现了你所遇到的问题,加快了问题的解决。最美好的祝福!是的,我看过演示。你的演示总是很有帮助的,我相信大多数treegrid用户都会遇到这个问题,这个例子肯定会帮助很多人。再次感谢你@瓦拉普拉卡什:不客气!在我最后的评论中,我指的是你创建的演示,它可以用来重现问题。仅仅因为我有了这个演示,我就可以快速解决您描述的问题。Oleg:有可能在扩展行附近显示ajax加载消息吗?原因是,如果网格有如此多的数据,则在展开行时,它会显示loading。。MSG在中间,这对于用户来说是不可见的,指示一些操作正在发生,有什么建议吗?如果你想让我这样做,我会为此发布一个问题?非常感谢。
$("#"+id,$t.grid.bDiv).css("display","");
$("#"+id,$t.grid.bDiv).css("display","none");