Dynatree + ленивая загрузка = медленная
Я начал использовать Dynatree в своем проекте, и у меня есть одна проблема - она работает очень медленно, когда я пытаюсь читать лениво. Я обнаружил, что все мое дерево перерисовывается каждый раз, когда я вызываю addChild, и я думаю, что оно неэффективно.
Кто-нибудь знает, что я могу с этим сделать?
Два года назад mar10 написал, что "enableUpdate(true) вызывает tree.redraw(), поэтому все дерево обновляется. Это изменится с выпуском 1.0, но даже тогда будет быстрее объединять вызовы addChild". (Http://stackru.com/questions/3097791/dynatree-addchild-question-for-the-components-author)
Я сейчас использую релиз 1.0, но не могу найти никаких изменений.
2 ответа
Может быть, вы можете попробовать версию 1.2.2, последнюю доступную, с последними пакетами jquery & UI?
Вместо addChild вы можете инициализировать и обновить Dynatree с помощью вызовов ajax. Используйте Динатри initAjax
и узел appendAjax
методы.
В качестве аргумента data
параметр, я передаю идентификатор родительского узла (или 0, если корневой узел).
initAjax: {
type: 'POST',
url: 'inc/treeNodes.php',
dataType: 'json',
data: {key: 0}
}
а также
onLazyRead: function (node) {
node.appendAjax({
type: 'POST',
url: "inc/treeNodes.php",
dataType: 'json',
data: {key: node.data.key}
})
}
При использовании этого метода скорость больше не является проблемой, поскольку при выполнении вызовов Ajax для загрузки дочерних узлов не перезагружается все дерево.