Вопрос проверяет знание способов отложенной загрузки JavaScript для ускорения рендеринга страницы.
Когда браузер встречает обычный тег <script> без атрибутов, он останавливает парсинг HTML, загружает и выполняет скрипт, и только потом продолжает строить DOM. Это называется блокирующим рендерингом, потому что пользователь видит пустую страницу до завершения загрузки скрипта. Для решения этой проблемы существуют атрибуты async и defer, а также другие подходы.
Атрибут async позволяет браузеру загружать скрипт асинхронно, параллельно с парсингом HTML. Как только скрипт загружен, он выполняется немедленно, прерывая парсинг. Это полезно для независимых скриптов, например аналитики, где порядок выполнения не важен. Однако если скрипты зависят друг от друга, async может нарушить порядок.
Атрибут defer также загружает скрипт параллельно, но выполнение откладывается до полного завершения парсинга HTML. При этом скрипты с defer выполняются в порядке их появления в документе. Это идеально для скриптов, которые должны работать после построения DOM, например для манипуляций с элементами.
<body> — простой способ, но не всегда эффективен для больших скриптов.document.createElement('script') и добавление на страницу после события DOMContentLoaded.type="module", который по умолчанию ведёт себя как defer.<!-- Блокирующий скрипт -->
<script src="script.js"></script>
<!-- Асинхронная загрузка -->
<script async src="analytics.js"></script>
<!-- Отложенное выполнение -->
<script defer src="app.js"></script>
<!-- Динамическая загрузка -->
<script>
window.addEventListener('DOMContentLoaded', function() {
var s = document.createElement('script');
s.src = 'lazy.js';
document.body.appendChild(s);
});
</script>Вывод: для критически важных скриптов, которые должны выполняться после загрузки DOM, используйте defer. Для независимых скриптов, таких как счётчики или реклама, подойдёт async. Это значительно улучшает скорость рендеринга и пользовательский опыт.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
HTML
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию