Я использую jqgrid treegrid для удаленного доступа к данным при расширении события. Он быстро извлекает данные, но для загрузки на стороне клиента требуется время, а также при свертывании узла, он дает ошибку стоп-скрипта в IE8. В FF и Chrome это требует времени, но не работает с ошибками скрипта. У меня есть только 480 записей, но treegrid показывает огромный недостаток производительности. IE8 ошибка разрушающегося февраля-2012 узел ...Проблемы с производительностью jggrid treegrid в IE8
ответ
Я проверил свой дема и у меня есть один совет горячего, чтобы улучшить производительность резко. Причиной являются the line внутри expandRow:
$("#"+id,$t.grid.bDiv).css("display","");
и another line внутри collapseRow:
$("#"+id,$t.grid.bDiv).css("display","none");
Линии использует $t.grid.bDiv
в качестве параметра контекста JQuery. Из этого следует, что данные из $t.grid.bDiv
заполняются без использования индекса, существующего для идентификаторов. В случае, если в сетке нет дубликатов идентификаторов (что было бы ошибкой в данных), можно удалить параметр $t.grid.bDiv
The demo идентичен вашей первоначальной демонстрации, но я использовал фиксированный код функции, где указанные строки заменяются на
$("#"+$.jgrid.jqID(id)).css("display","");
и
$("#"+$.jgrid.jqID(id)).css("display","none");
Я использовал оригинальный jqGrid 4.1.1 jquery.jqGrid.min.js
, но переписал Кодекса только expandRow
и collapseRow
FUNC Тион с
$.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.
ОБНОВЛЕНО 2: Исправление теперь в главном коде jqGrid на GitHub (см here)
- 1. Jggrid treegrid performance
- 2. Как получить дочерние узлы в jgGrid treegrid
- 3. Как скрыть строки в jgGrid treegrid, вызванные после события expandNode?
- 4. Как уменьшить размер шрифта в строках листа jggrid treegrid
- 5. Как подсчитать общее количество строк в jggrid treegrid режиме
- 6. Проблемы с производительностью symfony
- 7. Проблемы с производительностью Castor
- 8. Проблемы с производительностью Javascript
- 9. Проблемы с производительностью BitVector
- 10. Проблемы с производительностью angular.js
- 11. Проблемы с производительностью TListView
- 12. postgresql проблемы с производительностью
- 13. Важнейшие проблемы с производительностью
- 14. jQuery.keypad Проблемы с производительностью
- 15. Проблемы с производительностью MongoDB
- 16. Проблемы с производительностью Oracle
- 17. Проблемы с производительностью list.files
- 18. Проблемы с производительностью GXT
- 19. Проблемы с производительностью MemSQL
- 20. Проблемы с производительностью WPF
- 21. Проблемы с производительностью KineticJS
- 22. Проблемы с производительностью SwiftyJSON
- 23. Проблемы с производительностью SwapChainPanel
- 24. Jquery.svg проблемы с производительностью
- 25. Проблемы с производительностью DocumentDB
- 26. cfdocument проблемы с производительностью
- 27. Проблемы с производительностью ListActivity
- 28. AesCryptoServiceProvider, проблемы с производительностью
- 29. Проблемы с производительностью
- 30. Многопоточные проблемы с производительностью
Олег: Отлично! не могу вас поблагодарить. Производительность, безусловно, намного лучше ... – varaprakash
@varaprakash: Добро пожаловать! Я вижу, что текущий код TreeGrid можно улучшить гораздо лучше для лучшей производительности, но я надеюсь, что я нашел узкое место, которое у вас было. Я трачу около 10 минут, чтобы найти проблему и исправить ее. Гораздо больше времени взяли написание ответа :-). В любом случае вы можете видеть на примере, что у вас есть полная рабочая демонстрация, которая воспроизводит проблему, которая ускоряет решение проблемы. С наилучшими пожеланиями! – Oleg
Да, я видел демо. Ваши демонстрации всегда полезны, и я уверен, что эта проблема может возникнуть у большинства пользователей treegrid, и этот пример определенно помогает многим. Еще раз спасибо! – varaprakash