Я протестировал ваше демо, и у меня есть один совет, чтобы значительно улучшить производительность. Причиной являются строка внутри expandRow :
$("#"+id,$t.grid.bDiv).css("display","");
и другая строка внутри collapseRow :
$("#"+id,$t.grid.bDiv).css("display","none");
В строках используется $t.grid.bDiv
в качестве параметра контекста jQuery. Отсюда следует, что данные из $t.grid.bDiv
fill будут искать без использования индекса, существующего для идентификаторов. Если в сетке нет дубликатов идентификаторов (что может быть ошибкой в данных), можно удалить параметр $t.grid.bDiv
Демонстрационная версия идентична вашей исходной демонстрационной версии, но я использовал фиксированный код функции, в которой вышеуказанные строки заменены на
$("#"+$.jgrid.jqID(id)).css("display","");
и
$("#"+$.jgrid.jqID(id)).css("display","none");
Я использовал оригинальный jqGrid 4.1.1 jquery.jqGrid.min.js
, но переписал код только функцией expandRow
и collapseRow
с помощью
$.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);
}
});
});
}
});
Я думаю, что можно еще больше повысить производительность кода, но, по крайней мере, простое изменение может значительно повысить производительность свертывания или расширения узлов дерева, имеющих много элементов.
ОБНОВЛЕНО: Я только что опубликовал запрос на получение , который устраняет описанную выше проблему в основном коде jqGrid. Я решил использовать $($t.rows.namedItem(id))
вместо описанного выше $ ("#" + $. Jgrid.jqID (id)). Я точно не измерил производительность, но использование namedItem должно быть максимально близко к исходному коду jqGrid, и я надеюсь, что он работает немного быстрее как селектор идентификатора jQuery.
ОБНОВЛЕНО 2: Исправление теперь в основном коде jqGrid на github (см. здесь )