Я также столкнулся с проблемами с производительностью дерева dijit при наличии дерева с 10000+ узлами, которые должны быть загружены одновременно, с ~ 3000 элементами на самом верхнем уровне.
В дереве был только один фиктивный корневой узел, который загружает все дерево при первом клике с помощью вызова ajax.
В этом случае создание дерева заняло более 1 минуты для загрузки, и я получил всплывающее диалоговое окно «Остановить выполнение этого скрипта» в IE8.
После нескольких шагов оптимизации дерево теперь загружается в течение 2 секунд во всех основных браузерах (включая IE8-IE11).
Первая оптимизация, которую я сделал, использовала dijit/tree/ObjectStoreModel
в качестве модели дерева и dojo/store/Memory
в качестве хранилища данных.
Это ускорило вставку узлов json ответа ajax в хранилище данных дерева.
Вторая оптимизация касалась медленного создания узлов дерева. Это потребовало больше усилий, чтобы исправить:
Мне пришлось расширить dijit/Tree
и переопределить функцию setChildItems()
(часть, которая вызывает функцию _createTreeNode()
).
Я сохранил всю логику setChildItems()
без изменений, просто добавил распараллеливание создания узлов дерева с помощью этой техники:
http://www.picnet.com.au/blogs/Guido/post/2010/03/04/How-to-prevent-Stop-running-this-script-message-in-browsers.aspx
Надеюсь, это поможет, если нужно, я могу опубликовать исходный код моего обходного пути