В чём разница между событиями DOMContentLoaded и load?
DOM и браузер
`DOMContentLoaded` срабатывает, когда HTML полностью разобран и построен DOM, не дожидаясь стилей, изображений и подframes. `load` срабатывает, когда загружены вообще все ресурсы страницы.
document.addEventListener('DOMContentLoaded', () => {
// DOM готов: можно искать элементы
});
window.addEventListener('load', () => {
// загружены изображения, стили, iframe
});Что ждёт каждое событие
DOMContentLoaded: разбор HTML и синхронные скрипты (они блокируют разбор). Скрипты сdeferвыполняются до него,async— не гарантированно.load: плюс изображения, шрифты, таблицы стилей, iframe.
Когда что использовать
- Инициализация интерфейса, навешивание обработчиков —
DOMContentLoaded(раньше и достаточно). - Расчёты по размерам картинок, финальные метрики —
load. - Скрипт в конце
<body>или сdeferобычно не требует ожидания события вообще.
Связанные вещи
document.readyState:loading→interactive(DOM готов) →complete(всё загружено).beforeunloadиunloadсрабатывают при уходе со страницы.
Коротко для собеседования
DOMContentLoaded — DOM готов, ресурсы ещё могут грузиться; load — загружено абсолютно всё. Интерфейс инициализируют по первому, размеры картинок и финальные замеры — по второму.