减少重排次数可显著提升移动端性能:通过documentfragment批量插入、csstext或css类集中设置样式、用transform/opacity替代布局属性、缓存或延迟读取布局信息,100次dom操作耗时从750ms降至130ms,帧率跃升至近60fps。

减少重排次数对移动端体验提升效果非常直接:低端安卓机上,100次分散的 DOM 插入可能让列表渲染卡顿超过600ms,而合并为1次重排后常能压到120ms以内,帧率从30fps跃升至接近60fps。核心不是“少做”,而是“集中做”——把所有布局变更打包进单次渲染流水线。
用 DocumentFragment 批量插入节点
移动端 DOM 操作延迟更高,逐个appendChild会反复中断 JS 执行、强制同步布局。DocumentFragment 是纯内存对象,不挂载、不触发任何渲染。
- 创建 fragment:
const frag = document.createDocumentFragment() - 所有新元素(
li、div等)都 append 到 frag,不碰真实 DOM - 最后只调用一次
parent.appendChild(frag)
实测在 iOS Safari 和 Chrome for Android 上,100 条列表项插入耗时可从平均 750ms 降至 130ms 左右。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
样式修改全部收口,避免逐条赋值
移动端渲染引擎对 style 属性写入更敏感。每写一次 el.style.width 或 el.style.margin 都可能触发一次重排。
- 改用
el.style.cssText = 'width:200px;height:44px;padding:8px;'一次性设置 - 更推荐预设 CSS 类(如
.list-item--large),用el.classList.add()切换 —— 浏览器底层优化成熟,且支持硬件加速提示 - 避免在循环中混用写样式 + 读尺寸(如 offsetWidth),这会在移动端引发严重布局抖动
动画和显隐切换绕开布局属性
移动端 GPU 资源有限,left、top、width 这类属性修改必然触发布局计算;而 transform 和 opacity 只走合成层,由 GPU 直接处理。
- 平移用
transform: translateX(100px),别用left: 100px - 淡入淡出用
opacity: 0/1+will-change: opacity,比display: none更顺滑,且不破坏文档流 - 滚动监听中更新位置时,优先用
transform做视差或跟随效果,避免反复修改 top/left
读取布局信息必须缓存或延后
移动端获取 offsetHeight、getComputedStyle、scrollWidth 等会强制完成所有待处理样式计算,打断渲染流水线,代价极高。
- 所有尺寸读取操作统一放在 DOM 写入完成之后,不要穿插在修改过程中
- 若需多次使用同一尺寸,首次读取后存入变量复用,不重复访问
- 对滚动、resize 等高频事件,用
requestAnimationFrame延迟到下一帧再读,避免连续强制同步布局
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










