重排、重绘、事件委托和内存泄漏怎么理解

先理解原理和示例,再练习完整口述与追问。

布局变化可能引发布局计算,视觉变化可能涉及绘制,部分动画可走合成,但要实测。避免循环中交错读写布局。事件委托依赖冒泡;检查 target、currentTarget 和动态节点。

内存问题重点排查未移除监听、未清理定时器、全局引用及脱离文档但仍被引用的 DOM。

布局计算确定元素几何位置,绘制生成视觉内容,合成把图层结果组合显示。读取 offsetWidth 等布局信息前若存在未完成的样式修改,可能迫使浏览器同步计算;读写交错会放大成本。事件委托利用事件传播在祖先处理后代动作;内存泄漏则要追踪已经不需要的对象为什么仍然可达。

列表逐项写 style 后马上读 offsetHeight,容易反复触发布局;可以先批量读取,再批量写入。委托点击时通过 event.target.closest 查找真实按钮,再确认它属于当前容器,避免点击图标后识别失败。离开页面要清理绑定在 window/document 的监听、订阅和定时器,并比较操作前后 heap snapshot 的保留链。

不是所有 DOM 读操作都强制布局,也不是所有 transform 都绝对免费。focus 等不冒泡事件需要使用捕获或相应冒泡替代事件;事件委托也不替代权限检查。

布局计算负责元素几何位置和尺寸,绘制生成视觉内容,合成组合图层。改变 width 等可能引发布局,颜色可能只需绘制,某些 transform 动画可主要走合成,但实际要测量。循环中交错读写布局可能迫使浏览器同步计算,应尽量批量读写。事件委托用祖先监听冒泡事件,target 是事件来源,currentTarget 是当前监听者。内存泄漏通常看长期引用、监听、定时器和脱离文档的 DOM,而不是仅凭内存上涨一次就下结论。