Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

События документа JS: DOM API

Мы уже знакомы с событиями, которые возникают в ответ на действия пользователей. Но еще существует ряд событий, которые привязаны к работе самого браузера. К таким событиям относятся события на загрузку и выгрузку страницы:

  • beforeunload – пользователь пытается уйти со страницы
  • load – все ресурсы загружены (картинки, стили, скрипты и так далее)
  • DOMContentLoaded – DOM-дерево полностью построено и готово к работе, без ожидания полной загрузки таблиц стилей, изображений и фреймов

О последнем поговорим подробнее. Это важное событие, которое часто используется в коде, зависящем от DOM.

Иногда скрипты могут запускаться до того, как готов DOM, от которого они зависят. В таком случае возникают ошибки. Но если при этом использовать событие DOMContentLoaded, то ошибок можно избежать.

Это событие привязано к document:

<script>
  document.addEventListener('DOMContentLoaded', () => {
    // Если бы DOM не был готов, мы бы ничего не нашли
    const coll = document.querySelectorAll('.help');
    coll.forEach((el) => el.classList.add('hidden'));
  });
</script>

Скорость построения DOM-дерева во многом зависит от тегов <script>. По стандарту любой <script> в HTML будет выполняться до полного построения дерева. Это значит, что скорость отработки кода в этом блоке <script> будет сильно влиять на скорость загрузки сайта и на то, когда сработает событие DOMContentLoaded.

Тема оптимизации загрузки скриптов и быстрой инициализации достаточно сложна. Это связано не только с большим количеством факторов, влияющих на порядок и скорость, но также и с тем, что в разных браузерах этот механизм работает по-разному. Здесь мы не будем его разбирать, это тема продвинутого уровня, и по ней написано множество статей.

А пока мы рассмотрим такой скриншот:

Network

Обратите внимание на красную и синюю полоски. Красная показывает момент, когда сработало событие load, а синяя — DOMContentLoaded. Внизу картинки указано время срабатывания каждого события от начала загрузки страницы.

Из картинки видно, что браузер сначала скачивает HTML-файл страницы, затем извлекает из него ссылки на все внешние ресурсы и начинает их загрузку. Для большей эффективности скачивание ресурсов идет параллельно настолько, насколько это возможно.


Дополнительные материалы

  1. Как управлять загрузкой скриптов через async и defer?

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 21 ноября
профессия
от 39 525 ₸ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 21 ноября
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
Старт 21 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»