从浏览器的渲染角度来进行性能优化
从浏览器的渲染角度来进行性能优化
性能瓶颈
- js 执行引擎与渲染引擎是互斥的,他们是共同存在与浏览器的 UI 线程里面
- js 引擎负责执行我们的 js 代码从而产生 Dom 树, 渲染引擎则是依据 Dom 树,样式树来构建渲染树,然后排版与绘制,然后组合,从而计算出显示的像素点。
- 整个的流程需要在一帧内完成,这样才能达到很好的性能要求,通常是 16ms,如果时间超过这个时间,就会出现所谓的丢帧的现象。
- 对于渲染引擎而言,排版与绘制是比较耗时的。所以要尽量减少重绘重排的情况。
强制渲染
- 如果我们在 js 里面修改了 DOM 的某些影响布局的属性,紧接着,我们尝试读取这些属性,那么这样的代码会导致强制渲染,这种读写混合的写法就称为Layout Thrashing
- 如果我们的 js 代码只是修改 DOM 的这些影响布局的属性,但是不读取,那么浏览器会去做渲染合并,从而提供性能
React/Angular/Vue 这样的前端 SPA 框架是如何提升性能的
- 他们采用 Virtual Dom 的计算来记录当前 Dom 的状态,在执行变更检测的时候,读写的对象是来自于 Virtual DOM, 避免了Layout Thrashing.这个过程也就是我们常说的 Render 阶段
- 然后计算出新旧 Virtual Dom 的差异后,它会将真正需要变化的更新到真正的 DOM 上,这个是一个只写的操作,这个过程也就是我们常说的 Commit 阶段
- 这个点就是这些框架实现读写分离的地方
性能优化的点很大,这个是从浏览器的角度通过读写分离的方式来优化性能。这也是为什么我们避免直接去操作 DOM,或者说直接操作 DOM 会带来性能问题的原因
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?