Эти два события представляют разные этапы загрузки веб-страницы и часто вызывают путаницу у разработчиков. Рассмотрим их ключевые отличия и практическое применение.
document.addEventListener('DOMContentLoaded', () => {
console.log('DOM полностью загружен и обработан');
});
Характеристики:
async
) и отложенные (defer
) скрипты могут еще выполнятьсяwindow.addEventListener('load', () => {
console.log('Все ресурсы страницы загружены');
});
Характеристики:
DOMContentLoaded
(DOM готов)load
(все загружено)beforeunload
(перед закрытием)unload
(страница выгружается)Функция | node:test | Jest | Mocha |
---|---|---|---|
Нативный модуль | ✅ | ❌ | ❌ |
Параллельные тесты | ✅ | ✅ | ❌ |
Mocking system | ⚠️ | ✅ | ❌ |
Code coverage | ❌ | ✅ | ❌ |
Snapshot testing | ❌ | ✅ | ❌ |
Скрипты с async
:
DOMContentLoaded
Скрипты с defer
:
DOMContentLoaded
Динамически добавленные скрипты:
document.readyState
с событиями:
document.onreadystatechange = () => {
if (document.readyState === 'interactive') {
// Аналог DOMContentLoaded
}
if (document.readyState === 'complete') {
// Аналог load
}
};
Используйте DOMContentLoaded
для:
Используйте load
для:
DOMContentLoaded
— это событие готовности DOM-структуры, тогда как load
указывает на полную загрузку всех ресурсов. Выбор между ними зависит от конкретных требований к инициализации вашего JavaScript-кода и необходимой скорости отклика интерфейса.