\n\n\n\n\n• **Без атрибута** — блокирует парсинг HTML, выполняется немедленно (для критичных скриптов).\n• **defer** — загружается параллельно, выполняется после полной загрузки HTML (для основного JS).\n• **async** — загружается параллельно, выполняется сразу, как загрузится (для независимых скриптов вроде аналитики).\n\nОптимизация сторонних скриптов\n\nСторонние скрипты (чат-панели, трекеры, виджеты) — частая причина проблем с производительностью.\n\n• **Google Analytics / GTM** — настройте отложенную загрузку через defer или по инициативе пользователя.\n• **Facebook Pixel** — загружайте после взаимодействия (например, после скролла или клика).\n• **Чаты** — показывайте статическую иконку, а скрипт подгружайте по клику.\n• **Карты (Google Maps)** — вместо интерактивной карты показывайте статическое изображение-заглушку, подгружая JS по клику.\n\nВсегда проверяйте, какие внешние скрипты действительно необходимы. Каждый сторонний скрипт добавляет накладные расходы на сеть, парсинг и выполнение, что увеличивает INP и задержку первого ввода.","datePublished":"2026-05-02","dateModified":"2026-05-02"},{"@type":"WebPage","@id":"https://seohead.tech/glossary/javascript-optimization#webpage","url":"https://seohead.tech/glossary/javascript-optimization","name":"JavaScript оптимизация","description":"JavaScript оптимизация — это набор методов, направленных на уменьшение времени загрузки, парсинга и выполнения JS-кода. Поскольку JavaScript часто является главной причиной проблем с Core Web Vitals (особенно INP и LCP), его оптимизация критична для SEO и пользовательского опыта.","inLanguage":"ru-RU","isPartOf":{"@id":"https://seohead.tech#website"},"breadcrumb":{"@id":"https://seohead.tech/glossary/javascript-optimization#breadcrumb"},"mainEntity":{"@id":"https://seohead.tech/glossary/javascript-optimization#primary"},"author":{"@id":"https://seohead.tech#person-author"},"publisher":{"@id":"https://seohead.tech#organization"},"datePublished":"2026-05-02","dateModified":"2026-05-02","about":{"@id":"https://seohead.tech/glossary/javascript-optimization#faq"}},{"@type":"FAQPage","@id":"https://seohead.tech/glossary/javascript-optimization#faq","mainEntity":[{"@type":"Question","name":"Что такое long task и почему от них нужно избавляться?","acceptedAnswer":{"@type":"Answer","text":"Long task — это задача, выполняющаяся дольше 50 мс. Она блокирует основной поток, делая интерфейс неотзывчивым. Разбивайте long tasks на мелкие части с помощью setTimeout или requestIdleCallback."}},{"@type":"Question","name":"Как проверить, что JS оптимизирован?","acceptedAnswer":{"@type":"Answer","text":"Используйте Lighthouse (вкладка Performance), панель Coverage в Chrome DevTools (показывает процент неиспользуемого кода), а также отчёт «Reduce unused JavaScript» в PageSpeed Insights."}},{"@type":"Question","name":"Что такое code splitting на практике?","acceptedAnswer":{"@type":"Answer","text":"Вы разделяете бандл на несколько частей: основной (загружается сразу) и динамические (загружаются при переходе на определённую страницу или компонент). Например, код корзины интернет-магазина подгружается только когда пользователь нажал «Оформить заказ»."}}]}]}
JavaScript оптимизация — это набор методов, направленных на уменьшение времени загрузки, парсинга и выполнения JS-кода. Поскольку JavaScript часто является главной причиной проблем с Core Web Vitals (особенно INP и LCP), его оптимизация критична для SEO и пользовательского опыта.
Зачем оптимизировать JavaScript
Неоптимизированный JavaScript может блокировать отрисовку страницы, увеличивать время до интерактивности (TTI) и негативно влиять на INP. В современном вебе часто вес JS-бандлов превышает несколько мегабайт, что особенно критично для мобильных устройств и медленных соединений.
Code splitting — разделение кода на части, загружаемые по мере необходимости (Webpack, Rollup).
Tree shaking — удаление неиспользуемого кода из бандла (требует модульную структуру).
Defer / async — неблокирующая загрузка скриптов.
Сжатие (gzip / brotli) — уменьшение объёма передаваемых данных.
Кэширование — заголовки Cache-Control для повторных визитов.
Defer vs Async: в чём разница
HTML
<!-- Defer: загружается параллельно, выполняется после HTML -->
<script src="app.js" defer></script>
<!-- Async: загружается параллельно, выполняется сразу после загрузки -->
<script src="analytics.js" async></script>
Без атрибута — блокирует парсинг HTML, выполняется немедленно (для критичных скриптов).
defer — загружается параллельно, выполняется после полной загрузки HTML (для основного JS).
async — загружается параллельно, выполняется сразу, как загрузится (для независимых скриптов вроде аналитики).
Оптимизация сторонних скриптов
Сторонние скрипты (чат-панели, трекеры, виджеты) — частая причина проблем с производительностью.
Google Analytics / GTM — настройте отложенную загрузку через defer или по инициативе пользователя.
Facebook Pixel — загружайте после взаимодействия (например, после скролла или клика).
Чаты — показывайте статическую иконку, а скрипт подгружайте по клику.
Карты (Google Maps) — вместо интерактивной карты показывайте статическое изображение-заглушку, подгружая JS по клику.
warning
Всегда проверяйте, какие внешние скрипты действительно необходимы. Каждый сторонний скрипт добавляет накладные расходы на сеть, парсинг и выполнение, что увеличивает INP и задержку первого ввода.
FAQ
Частые вопросы
Long task — это задача, выполняющаяся дольше 50 мс. Она блокирует основной поток, делая интерфейс неотзывчивым. Разбивайте long tasks на мелкие части с помощью setTimeout или requestIdleCallback.
Используйте Lighthouse (вкладка Performance), панель Coverage в Chrome DevTools (показывает процент неиспользуемого кода), а также отчёт «Reduce unused JavaScript» в PageSpeed Insights.
Вы разделяете бандл на несколько частей: основной (загружается сразу) и динамические (загружаются при переходе на определённую страницу или компонент). Например, код корзины интернет-магазина подгружается только когда пользователь нажал «Оформить заказ».
Прямые контакты
Обсудим ваш проект?
Расскажите о целях и сайте — предложу формат работы и следующий шаг.