#javascript #jquery #jstree
#javascript #jquery #jstree
Вопрос:
Я работаю над ASP.NET страница, которая загружает довольно много данных AJAX в jsTree. Достаточно, чтобы я регулярно получал предупреждения «Скрипт на этой странице заставляет ваш веб-браузер работать медленно».
После довольно большой работы мне удалось разбить получение данных и загрузку их в дерево на достаточно мелкие части, чтобы избежать проблемы.
Моя проблема сейчас — если я загрузил достаточно данных в дерево, а затем выхожу со страницы (либо перейдя на другую страницу, либо закрыв браузер), я получаю сообщение «Скрипт на этой странице заставляет ваш веб-браузер работать медленно».
Очевидно, что где-то есть какой-то код, который подключен к дереву и который выполняется при выгрузке, пытаясь выполнить кучу ненужных очисток.
Я пытался вызвать jsTree.destroy(), стереть дерево DOM и т.д. Но проблема все еще существует.
Есть ли у кого-нибудь какие-либо идеи относительно того, как я могу выяснить, какой код выполняется в unload (), чтобы я мог придумать способ остановить это?
Я имею в виду, что страница закрывается. Ничего сколько-нибудь значимого не происходит. Но выполняется большая работа. Почему?
Комментарии:
1. Сколько узлов загружается в дерево? Возможно, их слишком много, и вам нужно загружать по требованию, т. Е. Когда узел дерева расширен, загрузите его дочерние элементы с сервера.
2. В jsTree есть опция «progressive_unload», которая заставляет его рекурсивно удалять всех дочерних элементов, но по умолчанию используется значение
false
. Если у вас нет этого набора, почему бы не добавить обработчик событий при выгрузке окна и посмотреть, что произойдет после этого, или поместить некоторые точки останова в код очистки jsTree, чтобы увидеть, где / почему это выполняется?3. Также — другая возможность заключается в том, что это просто обработка jQuery по умолчанию. jsTree связывает множество событий. jQuery автоматически очищает события, которые он привязывает — это необходимо, в частности, для IE6 и 7, которые имеют ужасную сборку мусора, и невыполнение этого требования приведет к утечкам памяти, которые сохраняются между страницами. Я сомневаюсь, что вы можете легко остановить это поведение, да вы и не хотели бы этого на самом деле — вместо этого вам, вероятно, нужно поискать способы ограничить объем материала, загружаемого в сеанс (например, предложение другого комментатора — динамически загружать)
4. Зойдберг — Мои проблемы не с загрузкой, они с выгрузкой. Речь не идет о загрузке дочерних элементов в дерево путем выполнения отдельных вызовов на сервер. Я уже это делаю. Дело в том, что если у меня слишком много дочерних элементов в дереве — независимо от того, как они туда попали, — я получаю ошибки при выходе со страницы.