Эти два события представляют разные этапы загрузки веб-страницы и часто вызывают путаницу у разработчиков. Рассмотрим их ключевые отличия и практическое применение.
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-кода и необходимой скорости отклика интерфейса.