Кратко
Секция статьи "Кратко"Если нужно запустить 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 используется, когда код работает со стилями и другими параметрами отображения. Такой код нужен редко, поэтому и событие используется нечасто.