优化 DOM 操作
探索减少 DOM 重排和重绘的技术,例如分离元素、分批更新 DOM,以及批量应用更改,以提升性能。
优化 DOM 操作 是 CoddyKit 上的免费 jQuery Academy 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 jQuery Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 jQuery Academy 课程共包含 3 节课。
为什么要优化 DOM?
文档对象模型(DOM)是浏览器表示网页的方式。当您更改页面上的元素(例如添加新元素或更新样式)时,浏览器必须执行相应工作来显示这些变化。
频繁或未经优化的 DOM 操作会拖慢网站,导致用户体验迟缓。让我们学习如何提高速度!
重排与重绘
每当您更改元素的布局或样式时,浏览器可能都需要执行“重排”(重新计算页面部分区域的布局)或“重绘”(重新绘制像素)。
- 重排:元素的大小、位置或内容发生变化时触发。由于会影响其他元素,因此开销较大。
- 重绘:仅元素的可见性或颜色发生变化、布局未改变时触发。开销小于重排。
我们的目标是尽量减少这些操作。
低效的 DOM 更新
想象一下逐个向列表中添加许多项目。每次添加都可能触发重排和重绘,尤其是在修改样式或尺寸时。
少量更改可能不易察觉,但如果有数百或数千次更改,页面可能会变得非常缓慢且无响应。
批量处理更改
优化 DOM 操作最有效的方法是将更改“批量处理”。不要直接对实时 DOM 进行许多细小的单独更改,而应尝试一次性完成所有更改。
您可以把它想象成粉刷墙壁:涂一大层比点上许多小块涂料更高效。
分离、修改、重新附加
一种有效的技术是暂时将元素从 DOM 中移除(分离),在“脱离状态”下完成所有必要的修改,然后再将其重新插入 DOM。
jQuery 的 .detach() 方法非常适合完成这项工作。它会移除元素,但会保留元素的所有数据和事件处理程序,这一点不同于 .remove()。
分离操作实战
此示例展示了如何分离元素,多次更改其内容和样式,然后将其重新附加。这样可以将重排次数减少到重新附加时的一次。
$(document).ready(function() {
// Assume this HTML exists: <ul id="myList"><li>Item A</li><li>Item B</li></ul>
const $list = $('#myList');
const $firstItem = $list.find('li:first');
// Detach the element
const $tempItem = $firstItem.detach();
// Make multiple changes while detached
$tempItem.text('DETACHED & MODIFIED');
$tempItem.css('background-color', 'yellow');
// Re-attach it to the list
$list.append($tempItem);
});分批创建更新内容
添加许多新元素时,逐个创建并直接附加到 DOM 中的做法效率很低。相反,应先在内存中创建所有新元素,然后一次性将它们全部附加。
您可以通过构造 HTML 字符串或创建 jQuery 对象数组来实现,然后使用一次 .append() 调用。
批量附加示例
此示例展示了如何创建多个列表项,并使用 HTML 字符串在一次 DOM 操作中将它们全部附加。
$(document).ready(function() {
// Assume this HTML exists: <ul id="batchList"></ul>
const $list = $('#batchList');
let newItemsHtml = ''; // Build HTML string
for (let i = 0; i < 5; i++) {
newItemsHtml += `<li>New Item ${i + 1}</li>`;
}
// Append all new items at once
$list.append(newItemsHtml);
});避免“布局抖动”
在修改 DOM 后立即读取布局属性(例如 .width()、.height()、.offset())时请务必小心。为了提供正确且最新的值,浏览器可能需要执行重排。
在循环中反复向 DOM 写入内容,然后读取布局属性,这种做法称为“布局抖动”,会严重损害性能。请将读取操作和写入操作分组!
优化您的代码
以下哪些技术能够有效优化 jQuery 中 DOM 操作的性能?
回顾:更快的 DOM
做得很好!您已经学习了优化 DOM 操作的关键策略:
- 了解开销较大的重排和重绘。
- 将更改批量处理,而不是逐项更新。
- 使用
.detach()在脱离状态下修改元素。 - 一次性附加多个元素,通常可以通过构建 HTML 字符串来实现。
- 将 DOM 的读取和写入分组,避免“布局抖动”。
应用这些技术后,您的 jQuery 应用将运行得更加流畅!
常见问题解答
「优化 DOM 操作」课时是免费的吗?
是的 — 「优化 DOM 操作」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 jQuery Academy 课程的其余内容,请升级到 CoddyKit PRO。 jQuery Academy 课程共包含 3 节课。
「优化 DOM 操作」这节课中我会学到什么?
探索减少 DOM 重排和重绘的技术,例如分离元素、分批更新 DOM,以及批量应用更改,以提升性能。 你通过在浏览器中直接运行的动手代码来练习 jQuery Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 jQuery Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 jQuery Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。
「优化 DOM 操作」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 jQuery Academy 课中编写并运行代码吗?
能。每节 jQuery Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。