Wicket nestedTree зависает Internet Explorer 10 после расширения узла

#java #ajax #internet-explorer #tree #wicket

#java #ajax #internet-explorer #дерево #wicket

Вопрос:

У меня проблема с Wicket NestedTree в InternetExplorer 10/11. Когда у меня есть узел, у которого число дочерних элементов — около 5000, то после попытки расширения узла ie зависает, пока я не остановлю выполнение javascript. В firefox, opera, более старой версии ie (7 — 8) все в порядке, загрузка длится всего несколько секунд.

Реализация NestedTree основана на ajax-запросах, и мне интересно, есть ли у более новых версий ie проблемы с ajax-запросами hudge. Проблема не на стороне сервера, потому что запрос выполняется быстро. Когда я попробовал profile IE во встроенном профилировщике, я заметил быстрый рост использования памяти после расширения. Использование увеличилось до 800 МБ, а затем приостановлено. У кого-нибудь была подобная проблема? У кого-нибудь были идеи, что может вызвать проблему?

Ответ №1:

Основная проблема (IIRC) с огромными ajax-i-fied компонентами в Wicket заключается в том, что каждая ссылка / поведение Ajax получает одну строку javascript, которая ее инициализирует. Для небольших чисел это нормально, но если у вас есть страница, состоящая из 1000 AJAX-ссылок, это становится медленным.

Существует обходной путь, который я успешно использую, и он заключается в замене всех AJAX-ссылок на метки setOutputMarkupId(true) и добавлении a OnChildEventBehaviour (см. Мой Код на github) к некоторому родительскому элементу. Затем в этом родительском элементе используйте идентификатор event компонента ‘s, чтобы найти идентификатор в дереве компонентов.

Комментарии:

1. К сожалению, когда я изменил компонент ссылки Ajax на обычную метку, расширение узла длится слишком долго. Во-первых, браузер не приостанавливается полностью, мне не нужно останавливать выполнение Java script, но проблема в том, что это слишком долго. У кого-нибудь есть другая идея? Странно, что проблема выполняется только в IE. Что может вызвать это?

2. Другая причина, по которой это занимает много времени, вероятно, заключается в том, что у вас также много HTML, который необходимо проанализировать… По моему опыту, javascript должен был сделать свое дело. Можете ли вы проверить дерево / источник DOM, чтобы увидеть, действительно ли количество строк javascript значительно уменьшается? Wicket.Ajax.ajax({"u":".... ? Возможно, у вас все еще есть какой-то другой javascript, который занимает много времени.

3. Действительно, я заметил, что в ответе html (запрос после расширения узла) у меня много строк с Wicket.Ajax.ajax({"u":"....

4. Тогда к узлам подключено либо больше AjaxLinks, либо AjaxBehaviors. Вы можете копаться в исходном коде дерева и попытаться найти их и заменить их. Это будет неприятная работа.

5. Я попробовал также профилировать в профилировщике IE. Согласно профилировщику, наибольшая продолжительность выполняется во время выполнения функции jquery — обратного вызова. Для запроса, который расширяет узел с 190 дочерними элементами, в ответ у меня есть скрипт, состоящий из 41078 знаков