前端性能优化-渲染优化

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

浏览器渲染原理:
读取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、对于复杂动画效果,使用绝对定位让其脱离文档流,否则会引起父元素及后续元素大量的回流

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,063评论 6 510
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,805评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,403评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,110评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,130评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,877评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,533评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,429评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,947评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,078评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,204评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,894评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,546评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,086评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,195评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,519评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,198评论 2 357

推荐阅读更多精彩内容

  • 前言 移动互联网时代,用户对于网页的打开速度要求越来越高。百度用户体验部研究表明,页面放弃率和页面的打开时间关系如...
    AI乔治阅读 737评论 0 3
  • 页面渲染的过程 构建DOM树解析HTML,创建DOM树,解析过程:如果遇到link & style,就会去下载这些...
    熬得萨菲阅读 975评论 0 5
  • 前言 为能更好的理解浏览器性能优化,本文会从浏览器多进程架构以及浏览器渲染过程逐步简单解析性能优化要点 浏览器的多...
    不慌_afbd阅读 513评论 0 0
  • 我们根据渲染的流程可知, 回流一定会触发重绘,而重绘不一定会回流。 渲染性能优化 回流和重绘的代价是比较昂贵的,渲...
    hui树阅读 158评论 1 0
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 125,203评论 2 7