document load 和 document ready、DOMContentLoaded 的区别
页面加载完成涉及三种常见事件。
1. load
当页面所有资源全部加载完成后(包括 DOM 文档树、CSS 文件、JS 文件、图片资源等),触发 load 事件。
问题:如果图片资源较多,加载时间较长,onload 等待执行的函数需要等待较长时间,所以一些效果可能受到影响。
window.addEventListener('load', () => {
console.log('所有资源已加载');
});
2. $(document).ready()(jQuery 语法)
当 DOM 文档树加载完成后就执行回调(不等待图片、CSS 等),所以会比 load 触发更早。
原生的 JS 不包括
ready()这个方法,只有load方法(即onload事件)。
// jQuery
$(document).ready(() => {
console.log('DOM 已就绪');
});
3. DOMContentLoaded(原生)
当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像和子框架的完全加载。是原生 JS 中"DOM 就绪"的标准事件。
document.addEventListener('DOMContentLoaded', () => {
console.log('DOM 解析完成');
});
触发顺序总结
DOMContentLoaded → (图片等加载完毕) → load
补充:把脚本标签放在
<body>末尾也能达到类似DOMContentLoaded的效果,因为脚本执行时 DOM 已解析。给<script>加defer属性也会等 DOM 解析完再执行;加async则下载完立刻执行,与 DOMContentLoaded 顺序不固定。
来源整理自:vue3js.cn 面试官系列



