Кратко
Секция статьи "Кратко"Если нужно запустить JavaScript-код после того, как страница загрузилась, то нужно подписаться на одно из событий у объекта window
:
DOMContentLoaded
— событие происходит, когда браузер разобрал HTML-страницу и составил DOM-дерево;load
— событие происходит, когда загрузилась и HTML страница, и все ресурсы для её отображения пользователю: стили, картинки и так далее.
DOMContentLoaded
всегда происходит раньше, чем load
. Чем больше стилей и картинок на странице, тем больше разница во времени между срабатыванием этих событий.
Как пишется
Секция статьи "Как пишется"window.addEventListener('load', function () { console.log('load!')})// это событие можно обрабатывать так же и на documentwindow.addEventListener('DOMContentLoaded', function () { console.log('dom loaded!')})
window.addEventListener('load', function () { console.log('load!') }) // это событие можно обрабатывать так же и на document window.addEventListener('DOMContentLoaded', function () { console.log('dom loaded!') })
Как понять
Секция статьи "Как понять"Чтобы показать пользователю страницу, браузер делает следующие шаги:
- Запрашивает HTML-страницу с сервера;
- Обрабатывает полученный HTML и создаёт DOM для взаимодействия между JavaScript и HTML (☝️ в конце этого этапа происходит событие
DOMContentLoaded
); - Запрашивает у сервера дополнительные файлы, встретившиеся при разборе HTML: картинки, шрифты, CSS- и JS-файлы;
- Получив все данные, отображает страницу пользователю (☝️ тут происходит событие
load
).
Событие DOMContentLoaded
гарантирует, что DOM готов. Можно искать узлы по нему и не бояться, что что-то не догрузилось.
Событие load
дополнительно гарантирует, что все стили и картинки готовы. В этот момент размеры элементов на страницы посчитаны верно и доступны. DOMContentLoaded
таких гарантий не даёт.
На практике
Секция статьи "На практике"🛠 Чаще всего используется DOMContentLoaded
.
🛠 Основной сценарий использования DOMContentLoaded
: инициализация интерфейса и первые обращения к серверу.
🛠 Нормальной практикой считается запуск всего приложения в момент срабатывания DOMContentLoaded
, таким образом исключается случай, когда DOM ещё не догрузился, а приложение уже ищет по нему узлы.
🛠 Событие load
используется, когда код работает со стилями и другими параметрами отображения. Такой код нужен редко, поэтому и событие используется нечасто.