Профайлинг. jquery.clean() и jquery.after() - почему так долго?
Всем доброго.
Есть проблема низкой производительности моих js на слабых машинах, иногда даже предложения браузера остановить работу скрипта на очень слабых машинах. У меня есть массив из большого количества данных, на основе которого я генерю таблицу. Генерю "более или менее по умному": var html; html += '...' для каждой строки, потом оборачиваю всё это в один элемент и делаю $().append(html); Но когда строк много, то всё равно на слабых машинах наблюдаются проблемы. Начал делать профайлинг. Многого не понял :) Вот что показывают профайлеры: Firebug: ![]() Chrome: ![]() То, что показывает хромовский профайлер, мягко говоря, не очень информативно. По профайлеру FB. Три функции (?)() - это функции, которые в цикле обрабатывают элементы массива. К ним претензий нет. А вот функции after() и clean() (нативные функции jQuery) отрабатывают по одному разу, но работают дохрена долго. Подскажите, пожалуйста, как можно улучшить ситуацию или хотя бы в какую сторону копать. |
без jQuery попробуйте
|
А можно более развернутый пример проблемного кода?
Скорее всего, вы генерируете таблицу целиком, а кусок. jQuery вроде бы обрабатывает по-разному, из-за IE. + очень много времени занимает вызов clean - это снятие обработчиков. Я бы посоветовал в этом случае делать вставку через innerHTML, без jQuery, а чтобы не появлялись висящие обработчики, использовать live-like события. |
Я генерирую таблицу целиком от <table> до </table> в обычном текстовом формате конкатенацией строк в цикле. Даже показывать нечего :)
Сегодня попробую вставлять без jQuery. Такая очевидная мысль не пришла мне в голову :) Спасибо. elf, а можно подробнее, пожалуйста, по поводу вашего комментария? В каком случае появляются висящие обработчики? |
Например, вы навешивате event listeners на строки или ячецки таблицы. jQuery складывает их во внутренний хэш. При удалении элементов их нужно убирать, поэтому движок проходится по всем внутренонстям таблицы, ищет обработчики, находит -- удаляет. Это долго.
Поэтому, если необходимы обработчики для действий с таблицей, правильнее навесить один обработчик на саму таблицу, а в нем уже разбирать, что делать. Проще, быстрее, удобно снимать. Называется event delegation |
Часовой пояс GMT +3, время: 04:56. |