IE8中的Jqgrid treegrid性能问题

时间:2012-03-05 22:01:18

标签: jqgrid

我正在使用jqgrid treegrid在expand事件上远程加载数据。它正在快速检索数据,但是在客户端加载并且在崩溃节点上花费时间,它在IE8上给出了停止脚本错误。在FF和Chrome上,它确实需要时间,但无需处理任何脚本错误。我只有480条记录要显示,但是treegrid显示出巨大的性能缺陷。折叠FEB-2012节点时出现IE8错误......

enter image description here

1 个答案:

答案 0 :(得分:3)

我测试了你的演示,我有一个热点,以显着提高性能。原因是the line内的expandRow

$("#"+id,$t.grid.bDiv).css("display","");
another line内的

collapseRow

$("#"+id,$t.grid.bDiv).css("display","none");

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

The demo与原始演示相同,但​​我使用了上述行替换为

的函数的固定代码
$("#"+$.jgrid.jqID(id)).css("display","");

$("#"+$.jgrid.jqID(id)).css("display","none");

我使用了原始的jqGrid 4.1.1 jquery.jqGrid.min.js,但仅使用

覆盖expandRowcollapseRow函数的代码
$.jgrid.extend({
    expandRow: function (record){
        this.each(function(){
            var $t = this;
            if(!$t.grid || !$t.p.treeGrid) {return;}
            var childern = $($t).jqGrid("getNodeChildren",record),
            //if ($($t).jqGrid("isVisibleNode",record)) {
            expanded = $t.p.treeReader.expanded_field;
            $(childern).each(function(i){
                var id  = $.jgrid.getAccessor(this,$t.p.localReader.id);
                //$("#"+id,$t.grid.bDiv).css("display","");
                $("#"+$.jgrid.jqID(id)).css("display","");
                if(this[expanded]) {
                    $($t).jqGrid("expandRow",this);
                }
            });
            //}
        });
    },
    collapseRow : function (record) {
        this.each(function(){
            var $t = this;
            if(!$t.grid || !$t.p.treeGrid) {return;}
            var childern = $($t).jqGrid("getNodeChildren",record),
            expanded = $t.p.treeReader.expanded_field;
            $(childern).each(function(i){
                var id  = $.jgrid.getAccessor(this,$t.p.localReader.id);
                //$("#"+id,$t.grid.bDiv).css("display","none");
                $("#"+$.jgrid.jqID(id)).css("display","none");
                if(this[expanded]){
                    $($t).jqGrid("collapseRow",this);
                }
            });
        });
    }
});

我认为可以更好地提高代码的性能,但至少简单的更改可以显着提高折叠或扩展具有多个项目的树节点的性能。

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

更新2:修复现在位于github上jqGrid的主代码中(参见here