<script>, которые влияют на загрузку и выполнение JavaScript:
Когда браузер загружает HTML-страницу, он последовательно обрабатывает (парсит) HTML-код. При обнаружении тега <script> браузер по умолчанию:
Это может значительно замедлить отображение страницы, особенно если скрипты большие или загружаются с медленного сервера.
<script async src="script.js"></script><script defer src="script.js"></script>DOMContentLoaded| Характеристика | Обычный скрипт | async | defer |
|---|---|---|---|
| Блокирует парсинг HTML при загрузке | Да | Нет | Нет |
| Блокирует парсинг HTML при выполнении | Да | Да | Нет |
| Порядок выполнения гарантирован | Да | Нет | Да |
| Ждет построения DOM перед выполнением | Нет | Нет | Да |
| Когда выполняется | Сразу | После загрузки | После парсинга HTML |
<!-- Аналитика: не зависит от DOM, порядок не важен -->
<script async src="analytics.js"></script>
<!-- Библиотека UI: нужен DOM и порядок важен -->
<script defer src="ui-framework.js"></script>
<script defer src="app.js"></script>async: для независимых скриптов, которым не нужен DOM и другие скрипты
defer: для скриптов, которым нужен полностью построенный DOM или которые зависят от других скриптов
Без атрибутов: когда скрипт должен выполниться до отображения страницы