splincodewd
@splincodewd
Developer

Как замерять производительность DOM в Chrome DevTools?

Здравствуйте, на дворе конец 2016 года, по JS пилят вовсю новые стандарты и фичи, а многие люди так до сих и не научились писать нормальный фронтенд. Многие по факту до сих пор используют jQuery, и это не есть плохо, все зависит от того, где мы потратим больше времени: на разворачивание фронтенд-среды или на коленке напишем на фриланс-бирже заказчику простой слайдер на чистом JS или jQuery без всяких Gulp/Webpack/MV* приблуд пришедших на пользу (начиная с 2009). Однако, в сложных проектах, даже если мы теперь пишем на ElectronJS свое приложение нам не обойтись без виртуального DOM или другой технологии под капотом какой либо библиотеки или фреймворка, которая самостоятельно манипулирует DOM в соответствии с моделью данных. Однако, я не понимаю одного, разные тесты показывают разные результаты, какой-то фреймворк хорошо работает с тем то, какой-то просто умеет быстро обновлять DOM, но неправильно делает другое. И тут как бы встает вопрос, проблема во фреймворке или просто я неправильно написал код, из-за которого неправильно работает фреймворк? Мы ведь все равно понимаем, что дополнительные либы и фреймворки такеже работают с DOM, просто это все автоматизированно на таймерах, слушателях и прочих сигналов-слотах.

Поэтому мне интересно, как замерять в своем проекте DOM и понимать где лажает просто браузер, где фреймворк, а где конкретно я. Подскажите что-нибудь на эту тему?

Почему я сказал, про браузер, потому как это легко заметить, когда начинаешь читать историю своих сообщений в ВК, когда открываешь все больше и больше старых сообщений, они также загружаются в DOM и все начинает подлагивать, и не понимаешь, что у браузера переполняется стек и перерасчеты становятся долгими. Но блин, когда мы открываем нативное десктопное приложение Excel, мы там спокойно 64000 строк может проскроллить и ничего тормозить не будет, вина в браузере и DOM или в том, что JS просто такой однопоточный и вечно интерпретируемый!?
  • Вопрос задан
  • 228 просмотров
Решения вопроса 1
@vintage
Excel реализует так называемый "виртуальный скролл" суть которого сводится к тому, что он рендерит не все 64000 строк, а только те, что видны в данный момент. При изменении позиции скролла скрытые строки удаляются, а освободившиеся от них ресурсы могут быть переиспользованы для создания новых строк. В вебе такую технику тоже можно применять, получая независимость отзывчивости от позиции скролла. Например: eigenmethod.github.io/mol/#demo=mol_grider_demo

К сожалению у данной техники есть ограничения из-за которых её нельзя встроить во фреймворк - высоты строк должны быть фиксированными, чтобы можно было понимать какие строки видны в определённой позиции скроллинга. Так что если число элементов в DOM у вас всё время растёт, то нужно что-то меня в алгоритме вашего приложения.

Тем не менее, есть и из ряда вон плохо написанные фреймворки, которые в принципе тормозят и единственный способ написать на них быстрое приложение - обращаться к функциям фреймворка как можно реже. Разница может составлять несколько десятков крат: eigenmethod.github.io/mol/app/bench/#sample=sapui5~mol
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы