Динамично развивающийся современный веб может быть полон динамического JavaScript-кода, который находится перед вызовом обычного тега <script>. В таких случаях каждый файл JavaScript содержит важный код, который пользователи вашего блога или сайта должны выполнить. Когда пользователь читает ваш блог, выше всего уровня ваших посещений он может тормозить выполнение JavaScript-кода, который выше всех ваших скриптов выполнится
Оптимизация загрузки скриптов: выбор между async и defer

В современном веб-разработке эффективная загрузка скриптов играет ключевую роль. Правильный выбор метода загрузки может существенно повлиять на время загрузки страницы и общее восприятие пользователем. В данном разделе мы рассмотрим два распространённых атрибута тега <script> – async и defer.
Оба этих атрибута позволяют браузеру загружать скрипты асинхронно, не блокируя последовательность загрузки и отображения контента страницы. Однако каждый из них имеет свои особенности и подходит для различных случаев использования.
Различие между ними кроется в том, когда точно начнётся выполнение загруженного скрипта. С атрибутом async скрипт будет выполнен сразу после загрузки, в то время как с defer выполнение начнётся только после того, как весь HTML-документ будет загружен, но до события DOMContentLoaded.
Понимание того, как браузеры интерпретируют и используют эти атрибуты, важно для того, чтобы оптимизировать время загрузки страницы и обеспечить правильную последовательность выполнения скриптов, не тормозя при этом загрузку и отображение контента для пользователя.
Этот HTML-раздел содержит общее введение в тему выбора между атрибутами async и defer для оптимизации загрузки скриптов на веб-странице, избегая использования запрещённых слов и добавляя синонимы для разнообразия текста.
Как работает атрибут async
В этом разделе мы рассмотрим, как браузеры обрабатывают скрипты с атрибутом async. Этот атрибут указывает, что скрипт может загружаться параллельно с другими элементами страницы, не блокируя их загрузку. Однако момент выполнения async-скриптов может быть непредсказуемым из-за их асинхронной природы.
- async-скрипты могут выполняться как только загрузятся, не дожидаясь завершения загрузки остальной части страницы.
- В случаях, когда порядок выполнения важен, следует быть осторожным, используя async, так как они могут начать выполнение до того, как весь DOM-документ будет полностью загружен.
- Для сценариев, которые зависят от DOM (например, использующих document.addEventListener(‘DOMContentLoaded’)), использование async может привести к тому, что скрипт выполнится до момента, когда DOM будет полностью готов, что может нарушить ожидаемый порядок.
Таким образом, использование async может быть полезным для скриптов, которые не зависят от содержимого страницы и могут выполняться независимо. В то же время важно помнить о потенциальных эффектах от их асинхронной загрузки на порядок выполнения кода и общую производительность страницы.
Особенности загрузки и выполнения
Современные веб-разработчики сталкиваются с необходимостью использовать скрипты различного типа – от основного кода приложения до сторонних библиотек и аналитических инструментов. Каждый из них может оказать влияние на общее время загрузки страницы и восприятие пользователем её скорости загрузки. Например, некорректное размещение скриптов или их неоптимальная загрузка могут тормозить работу страницы, особенно при большом количестве посещений.
Один из способов ускорения загрузки страницы – использование атрибутов async и defer для скриптов. Эти атрибуты позволяют браузеру загружать скрипты параллельно с другими ресурсами и выполнять их в оптимальный момент времени. Однако правила их применения и влияние на порядок выполнения кода могут различаться в зависимости от конкретной ситуации.
Когда использовать async

Чаще всего async применяется к скриптам, которые не зависят от других частей страницы и не модифицируют её содержимое сразу после загрузки. Такие скрипты могут выполняться асинхронно, не блокируя процесс отображения или взаимодействия пользователя с веб-страницей. В результате пользователи быстрее видят содержимое страницы и могут начать взаимодействие с ней, даже если динамический контент или функциональность будет загружаться позже.
При использовании async следует учитывать, что порядок выполнения скриптов не гарантируется и зависит от того, как быстро файлы загрузятся браузером. В случаях, где порядок загрузки и выполнения скриптов критичен или один скрипт зависит от другого, может быть лучше использовать другие методы загрузки, такие как последовательная загрузка без атрибутов или defer.
Всегда важно понимать, что асинхронная загрузка скриптов может привести к тому, что код будет выполнен сразу после загрузки, а не после того, как весь HTML-документ будет полностью построен. В некоторых случаях это может создать эффект «мгновенной реакции», когда скрипт начинает действовать, даже если другие части страницы ещё не загружены или обработаны браузером.
Использование async может быть особенно полезным на страницах с высокой посещаемостью или где требуется быстрый доступ к сторонним API или ресурсам, чтобы не тормозить основную загрузку страницы. Однако перед его применением стоит внимательно изучить конкретные условия и ожидаемый эффект на производительность и взаимодействие с контентом пользователя.
Применение атрибута defer

Один из важных аспектов оптимизации загрузки и выполнения скриптов на веб-страницах – использование атрибута defer. Этот механизм позволяет строить страницы таким образом, чтобы скрипты выполнялись в оптимальном порядке, не тормозя загрузку контента для пользователей.
Когда браузер находит тег `script_loader_tag` с атрибутом `src=»javascript.js»`, он начинает загрузку указанного файла. В современных браузерах такой скрипт, который не содержит атрибута `async` или `defer`, загружается и выполняется сразу же, останавливая процесс загрузки страницы до момента его завершения.
Здесь вступает в игру атрибут `defer`, который указывает браузеру, что скрипт должен быть загружен асинхронно, но выполнение его должно подождать до того момента, когда весь HTML-документ будет обработан. Это означает, что скрипты с `defer` будут выполняться в порядке их расположения в документе, но только после того, как документ полностью загрузится.
Такой подход особенно полезен для скриптов, которые зависят от структуры и содержания HTML-документа. Например, если скрипт использует `document.addEventListener(‘DOMContentLoaded’, function(){…})`, то он должен быть загружен до момента выполнения этого события, чтобы обеспечить корректное взаимодействие с элементами страницы.
Использование атрибута `defer` позволяет сделать страницу более отзывчивой, поскольку скрипты, которые не влияют на первоначальное отображение содержимого, не будут блокировать этот процесс. В результате пользователь получает более быстрый доступ к информации, что способствует улучшению пользовательского опыта и снижению времени загрузки страницы.
Этот раздел статьи подчеркивает важность использования атрибута defer для оптимизации загрузки и выполнения скриптов на веб-страницах, объясняя его преимущества и рекомендуемые сценарии применения.
Порядок загрузки и выполнения

В данном разделе мы рассмотрим, как браузеры строят и выполняют javascript-код на странице. Порядок, в котором скрипты загружаются и выполняются, имеет важное значение для эффективности и производительности вашего веб-приложения. Здесь мы должны понимать, как браузеры обрабатывают скрипты, когда они встречают их в HTML-документе, а также как они взаимодействуют с другими частями страницы, такими как стили и содержимое.
| Момент загрузки | Скрипт, указанный в атрибуте src элемента <script>, начнет загружаться сразу же после того, как браузер прочтет этот тег в HTML-документе. |
| Порядок загрузки | Браузеры читают HTML-документ последовательно сверху вниз. Если скрипты расположены перед другими ресурсами, такими как стили или изображения, они будут загружаться раньше. |
| Выполнение скриптов | JavaScript-код в скриптах выполняется в том порядке, в котором они были загружены, если не указаны атрибуты async или defer. Это может тормозить загрузку и отображение содержимого страницы, если скрипты долгие или зависят от динамических данных. |
| Динамический JavaScript | Скрипты, которые создаются или вставляются в документ динамически с использованием JavaScript, также выполняются в порядке, в котором они были вставлены с помощью методов DOM. Это правило также применимо к сторонним скриптам, которые подключаются после загрузки страницы. |
Этот раздел описывает основные аспекты порядка загрузки и выполнения JavaScript на веб-странице, не углубляясь в аспекты выбора между async и defer, но фокусируясь на том, как браузеры обрабатывают и выполняют скрипты по умолчанию.








