讲师中心 微信公众号
AI工具推荐 视频效率加速

如何优化javascript性能_减少重绘和回流的技巧有哪些

老磊大大_3282

老磊大大_3282

发布时间:2026-01-13 20:25:02

|

1031人浏览过

|

来源于php中文网

原创

回流是浏览器重新计算元素几何属性并重建渲染树的过程,重绘是仅更新样式而不改变布局的视觉刷新;回流必触发重绘,但重绘不一定触发回流。

如何优化javascript性能_减少重绘和回流的技巧有哪些

什么是回流(reflow)和重绘(repaint)

回流是浏览器重新计算元素几何属性(位置、尺寸)并重建渲染树的过程,触发条件包括读取 offsetTop、clientWidth、getComputedStyle() 等;重绘是样式变化但不改变布局时的视觉更新,比如改 color 或 background-color。回流必然触发重绘,但重绘不一定触发回流。

避免强制同步回流的写法

常见错误是“读-改-读”模式,在一次 JS 执行中多次触发回流。比如循环中反复读取 element.offsetWidth 再修改 style.left,浏览器被迫同步计算每次读取值,性能断崖式下降。

  • 把所有读操作集中到修改前,所有写操作集中到后面
  • 用 documentFragment 批量操作 DOM,再一次性 append 到真实节点
  • 用 getBoundingClientRect() 替代多个 layout 属性访问,它返回一个缓存快照
  • 对频繁动画元素,用 transform 和 opacity 替代 top/left 或 visibility,它们能走合成层(compositor layer),避开回流
const el = document.getElementById('box');
// ❌ 危险:三次强制回流
el.style.left = '10px';
console.log(el.offsetWidth); // 触发回流
el.style.top = '20px';
console.log(el.offsetHeight); // 再触发
el.style.width = '200px';

// ✅ 安全:先读后写
const rect = el.getBoundingClientRect();
const width = rect.width;
const height = rect.height;
el.style.cssText = `transform: translate(10px, 20px); width: 200px;`; // transform 不触发回流

批量 DOM 更新与 CSS 类切换

直接操作 style 属性会绕过 CSS 引擎优化,且难以复用;而切换 class 可由浏览器批量合并样式计算,也便于利用 CSS 的硬件加速特性。

Aria2 Json Rpc
Aria2 Json Rpc

通过 JSON‑RPC 2.0 与 aria2 下载管理器交互,使用自然语言命令管理下载、查询状态并控制任务。适用于 aria2、下载管理或种子操作。

下载
  • 避免在循环中逐个设置 el.style.xxx = yyy
  • 用 classList.add() / classList.toggle() 控制状态类,样式定义统一收口在 CSS 文件里
  • 对需要动态计算样式的场景,优先用 CSS 自定义属性(--my-var),再通过 element.style.setProperty() 更新,比逐项赋值更轻量
  • 动画场景下,给元素添加 will-change: transform(谨慎使用,仅对真正要动的元素)可提前提示浏览器创建合成层

监听 scroll / resize 时的节流与图层分离

scroll 和 resize 事件高频触发,若回调里含 DOM 读写,极易造成卡顿。关键不是简单加 throttle,而是把「测量」和「更新」彻底解耦。

立即学习“Java免费学习笔记(深入)”;

  • 用 requestAnimationFrame() 包裹读取逻辑(如获取滚动位置),确保在下一帧开始时执行
  • 把 DOM 更新逻辑放在另一个 requestAnimationFrame 回调中,实现读写分离
  • 对吸顶、视差等效果,用 position: sticky 或 transform: translateY() 替代 JS 实时计算 top 值
  • 避免在 scroll 回调里调用 getComputedStyle(el) —— 它是典型的同步回流诱因

最常被忽略的一点:即使你用了 transform,如果元素父容器有 overflow: hidden 或 filter,仍可能破坏合成层,导致降级回软件渲染。是否真正触发硬件加速,得看 Chrome DevTools 的 Layers 面板。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2526

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4539

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

3307

2026.03.24

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

3316

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

286

2025.12.06

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

598

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1476

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

2084

2025.09.12

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

0

2026.09.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.7万人学习

CSS教程
CSS教程

共754课时 | 95万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn