美文网首页
前端性能优化-渲染优化

前端性能优化-渲染优化

作者: 一代码农1970 | 来源:发表于2021-06-30 17:41 被阅读0次

一、浏览器渲染原理和关键渲染路径

浏览器渲染原理:
读取html,css文本,构建DOM树。(DOM ,CSSOM)- DOMtree
关键渲染路径:
javascript(触发视觉变化) - style(样式计算,css改变) - Layout(布局)- Paint(绘制)- Composite(合层)

二、 回流与重绘, 如何避免布局抖动

布局关心的是位置和大小。(如css:height,offset改变位置,大小),所以如果只是更改background,opcity,不需要Layout(布局),只需Paint(重绘)。

回流:首次加载叫布局。再次叫回流。影响回流的操作:
1、 添加/删除 元素
2、 操作styles,display:none
3、 offsetLeft,offsetTop ,scrollTop,clientWidth。使用这些属性,会引起强制布局更新
4、 移动元素位置
5、 修改浏览器大小,字体

通过Chrome devtools,performance性能检测主线程任务查看回流的过程


连续的读写DOM属性(width,offsetTop等),会引起强制的布局更新,强制布局更新会造成页面抖动 layout thrashing
使用FastDom 解决布局抖动, https://github.com/wilsonpage/fastdom

三、复合线程(compositor thread)与图层(layers)

复合就是把页面拆成多个图层,图层之间是互不影响的。只绘制自己的那个图层,再进行复合。图层拆分默认是浏览器来做,如果某个元素对其他元素影响比较大,建立独立图层。
查看图层


2.png

四、减少重绘 repaint

可以利用图层,避免回流,只触发复合,不触发回流与重绘。可以采用如下样式代替:
position:transform:translate(x,y)
Scale:transform:scale(n)
Rotation:transform:rotate(n deg)
Opacity:Opacity : 0….1

Css属性 will-change: transform - 告诉浏览器提到单独的图层
先看一个有回流的动画



打开页面 Chrome devtools,performance 录制功能


没有回流的动画
修改css 样式

.box {
  display: flex;
  justify-content: space-around;
  will-change: transform;
}
 
 
.box .img {
  width: 300px;
  height: 300px;
}
 
.img:hover {
  transform: scale(1.5, 1);
  transition: all 2s;
}

再进行performance 录制功能
查看主线程 task任务此时没有布局和绘制了,查看网页图层多了一个box图层
查看重绘:Chrome devtools ctrl shift p -> show rendering



JS操作避免回流、重绘
1、避免使用JS一个样式修改完接着改下一个样式,最好一次性更改CSS样式,或者将样式列表定义为class的名称
2、避免频繁操作DOM,使用文档片段创建一个子树,然后再拷贝到文档中
3、先隐藏元素,进行修改后再显示该元素,因为display:none上的DOM操作不会引发回流和重绘
4、避免循环读取offsetLeft等属性,在循环之前把它们存起来
5、对于复杂动画效果,使用绝对定位让其脱离文档流,否则会引起父元素及后续元素大量的回流

相关文章

  • 前端性能优化(中)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(上)...

  • 前端性能优化(下)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(中)...

  • 前端性能优化-开篇

    前端性能优化问题是每个前端需要掌握的技术。这篇文章从渲染优化、代码优化、资源优化、构建优化、传输加载优化、更多流行...

  • 前端性能优化(上)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 为什么要进行前端性能...

  • 前端性能优化 - 首屏渲染优化实现及其必要性

    前端性能优化,不得不提的就是这个首屏渲染优化 首屏渲染优化 其实更具体点,应该是:首次加载首屏渲染优化,原因是某些...

  • 前端性能优化的三个维度

    前端性能优化可以分为三个level:静态资源优化、接口访问优化、页面渲染速度优化,在操控门槛上依次递增,优化效果上...

  • Web性能优化

    网页渲染性能优化 —— 渲染原理https://zhuanlan.zhihu.com/p/39879808 前端不...

  • iOS 性能优化内存优化学习

    iOS APP渲染性能优化iOS性能优化之内存(memory)优化iOS内存和性能优化

  • 前端性能优化-渲染优化

    一、浏览器渲染原理和关键渲染路径 浏览器渲染原理:读取html,css文本,构建DOM树。(DOM ,CSSOM)...

  • 前端面试必问及加分点---性能优化篇

    如何进行网站性能优化 你有用过哪些前端性能优化的方法? 谈谈性能优化问题 代码层面的优化 前端性能优化最佳实践

网友评论

      本文标题:前端性能优化-渲染优化

      本文链接:https://www.haomeiwen.com/subject/ixirultx.html