document的load 和ready有什么区别?
在前端开发中,DOMContentLoaded
和 load
事件都表示网页加载的某个阶段,但它们触发的时机和代表的意义有所不同:
-
DOMContentLoaded
: 当 HTML 文档被完全解析和构建完成时触发,也就是 DOM 树构建完毕,无需等待样式表、图片和子框架加载完成。这意味着你可以开始操作 DOM 元素,即使页面上的某些资源(例如图片)仍在加载中。 -
load
: 当整个页面及其所有依赖资源(例如样式表、图片、脚本、子框架等)完全加载完成后触发。这意味着页面上的所有元素都已可用,并且所有资源都已下载完毕。
关键区别总结:
特性 | DOMContentLoaded |
load |
---|---|---|
触发时机 | DOM 树构建完成 | 所有资源(包括图片、样式表等)加载完成 |
依赖资源 | 不依赖样式表、图片和子框架 | 依赖所有资源 |
执行时机 | 比 load 更早 |
比 DOMContentLoaded 更晚 |
适用场景 | 尽早执行 DOM 操作,提升用户体验 | 确保所有资源加载完成后执行的操作,例如初始化依赖图片大小的组件 |
示例:
// DOMContentLoaded
document.addEventListener('DOMContentLoaded', function() {
console.log('DOM fully loaded and parsed');
// 可以安全地操作 DOM 元素
document.getElementById('myElement').textContent = 'Hello!';
});
// load
window.addEventListener('load', function() {
console.log('Page fully loaded');
// 可以确保所有资源都已加载完成
const imageWidth = document.getElementById('myImage').offsetWidth;
console.log('Image width:', imageWidth);
});
最佳实践:
为了获得最佳性能和用户体验,通常建议将脚本放在 </body>
结束标签之前,并尽可能使用 DOMContentLoaded
事件来执行 DOM 操作。这样可以避免阻塞页面渲染,并允许用户更快地看到页面内容。只有当你的脚本依赖于所有资源加载完成时,才需要使用 load
事件。
更详细的解释:
DOMContentLoaded
事件的触发条件是:
- HTML 文档被完全解析。
- DOM 树被完全构建。
- 所有被阻塞的脚本都已执行完毕. (defered 和 async 的脚本不会阻塞
DOMContentLoaded
)
load
事件的触发条件是:
DOMContentLoaded
事件的所有条件都已满足。- 所有资源(包括图片、样式表、脚本、子框架等)都已完全加载。
希望这个解释能够帮助你理解 DOMContentLoaded
和 load
事件的区别。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律