浏览器渲染及优化

Hello~大家好,这是我学习浏览器渲染机制时做的笔记,由于本人水平有限,所以在参考文章对于看不懂的便暂时没有作笔记下来,参考文章:

CSDN咨询云计算--有关网页渲染,每个前端开发者都该知道的那点事

浏览器重绘与重排的性能优化

浏览器内核渲染引擎渲染原理

浏览器如何进行渲染

  1. 处理html生成Dom(Document Object Model) Tree
  2. 处理css生成CSSOM(CSS Object Model) Tree
  3. 在文档对象模型和CSS对象模型之上,创建一棵由一组待生成渲染的对象组成的渲染树,即Render Tree
  4. 对Render树进行布局计算,即对渲染树上的每个元素,计算它的坐标,称之为布局。
  5. 绘制即Painting,渲染树上的元素最终展示在浏览器里

性能优化

(简单了解完浏览器渲染机制,我们可以据此进行性能优化)

首先了解一下重绘和重排
  • Repaint****重绘 当改变那些不会影响元素在网页中的位置的元素样式时,譬如background-color(背景色), border-color(边框色), visibility(可见性),浏览器只会用新的样式将元素重绘一次(这就是重绘,或者说重新构造样式),此时布局没有发生改变。
  • Reflow重排 当DOM变化影响了元素的几何属性(宽、高改变等等)
    浏览器此时需要重新计算元素几何属性
    并且页面中其他元素的几何属性可能会受影响
    这样渲染树就发生了改变,也就是重新构造RenderTree渲染树
触发重排的情况
  1. 页面初始渲染
  2. DOM操作(元素添加、删除、修改或者元素顺序的改变)
  3. 改变元素位置,改变元素尺寸(宽、高、内外边距、边框等),改变元素内容(文本或图片等)
  4. 浏览器窗口的操作(缩放,滚动)
  5. 添加或删除样式表
  6. 更改“类”的属性
  7. 伪类激活(悬停)

优化来啦

  • 渲染队列
div.style.left = '10px';
div.style.top = '10px';
div.style.width = '20px';
div.style.height = '20px';

如上,我们改变元素属性会触发重排,理论上会触发四次重排,而实际上它只会进行一次重排,这是因为我们现代的浏览器都有渲染队列的机制 ,当我改变了元素的一个样式会导致浏览器发生重排或重绘时,它会进入一个渲染队列,然后浏览器继续往下看,如果下面还有样式修改,同样入列,直到下面没有样式修改,浏览器会按照渲染队列批量执行来优化重排过程,一并修改样式 。

如果我们现在想修改样式后在后台打印

div.style.left = '10px';
console.log(div.offsetLeft);
div.style.top = '10px';
console.log(div.offsetTop);
div.style.width = '20px';
console.log(div.offsetWidth);
div.style.height = '20px';
console.log(div.offsetHeight);

此时则会发生四次重排,而原因则是因为offsetLeft/Top/Width/Height

事实上,以下属性或方法会刷新渲染队列:

  • offsetTop、offsetLeft、offsetWidth、offsetHeight
  • clientTop、clientLeft、clientWidth、clientHeight
  • scrollTop、scrollLeft、scrollWidth、scrollHeight
  • getComputedStyle()(IE中currentStyle)

我们修改为

div.style.left = '10px';
div.style.top = '10px';
div.style.width = '20px';
div.style.height = '20px';
console.log(div.offsetLeft);
console.log(div.offsetTop);
console.log(div.offsetWidth);
console.log(div.offsetHeight);

则优化为一次重排了

  • 减少http请求的次数,根据功能和数据加载流程合并相应的js,css,images 减少其请求的次数
  • 减少带宽,压缩对应的文件去掉一些空格,注释提高相应速度
  • 把样式表放在头部
  • 脚本代码引用加在<body>元素页面内容的后面,这样在解析脚本之前,页面的内容将完全呈现在浏览器中,用户会因为显示空白时间缩短而感觉打开页面速度加快
  • 将JavaScript和CSS存放到外部文件中,可以有效地将js, css文档缓存到本地,当你请求同样包含以上js, css的脚本的时候,便无需重新下载,直接从缓存中载入了。此外,它还有一个很明显的优点,就是增强了可重用性,你不必在每个页面都重复地写上一大串的代码,造成资源和带宽的浪费。
  • 尽量简化和优化CSS选择器,将嵌套程度保持在最低水平。
    以下是CSS选择器的性能排名(从最快者开始):
  1. 识别器:#id
  2. 类:.class
  3. 标签
  4. 相邻兄弟选择器:a + i
  5. 父类选择器:ul> li
  6. 通用选择器:*
  7. 属性选择:input[type="text"]
  8. 伪类和伪元素:a:hover

浏览器在处理选择器时依照从右到左的原则,因此最右端的选择器应该是最快的:#id或则.class:

div * {...} // bad
.list li {...} // bad
.list-item {...} // good
#list .list-item {...}  // good 

  • 尽量只给位置绝对或者固定的元素添加动画效果

Author:YY

Date:2017.7.10

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,748评论 1 92
  • 前端必读:浏览器内部工作原理[https://kb.cnblogs.com/page/129756/] 作者: T...
    我是强强阅读 1,144评论 0 2
  • 1. 介绍 浏览器可能是最广泛使用的软件。本书将介绍浏览器的工作原理。我们将看到,当你在地址栏中输入google....
    康斌阅读 2,018评论 7 18
  • 简介浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.c...
    听风阁阅读 3,285评论 0 7
  • 转载说明 一、介绍 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入g...
    17碎那年阅读 2,447评论 0 22