7 скрытых узких мест в JavaScript и способы их устранения

Медленные веб-приложения редко тормозят из-за плохих алгоритмов. Причина обычно в том, как ваш код взаимодействует с браузером.

Я проанализировал 300 работающих приложений. 73% проблем с производительностью вызваны этими 7 факторами.

  1. Layout thrashing (избыточные пересчеты макета) Это происходит, когда вы считываете свойство, записываете данные в DOM, а затем снова считываете. Это заставляет браузер многократно пересчитывать макет.
  1. Unbounded event listeners (неудаляемые обработчики событий) Добавление обработчика события без его последующего удаления приводит к утечкам памяти. Это серьезная проблема в одностраничных приложениях (SPA).
  1. Synchronous DOM reads in loops (синхронное чтение DOM в циклах) Чтение offsetWidth или getBoundingClientRect внутри цикла вызывает постоянные пересчеты (reflows).
  1. Missing requestAnimationFrame batching (отсутствие пакетной обработки через requestAnimationFrame) Прямые изменения DOM при событиях scroll или resize происходят слишком часто. Это вызывает «дерганье» интерфейса (jank).
  1. Large JSON.parse payloads (большие объемы данных в JSON.parse) Парсинг больших файлов блокирует основной поток. Это приводит к задержкам ввода (input lag).
  1. Complex CSS selector matching (сложный подбор CSS-селекторов) Глубоко вложенные или сложные селекторы замедляют пересчет стилей.
  1. Duplicate bundle chunks (дублирующиеся чанки бандла) Большие неоптимизированные бандлы увеличивают время передачи данных.

Как измерить прогресс:

Устранение этих проблем улучшает ваши показатели Core Web Vitals, в частности Largest Contentful Paint и Interaction to Next Paint.

Источник: https://dev.to/kui_luo/how-to-find-and-fix-7-hidden-performance-bottlenecks-in-your-javascript-code-ek5