详解浏览器渲染页面过程


Posted in Javascript onFebruary 09, 2017

详解浏览器渲染页面过程

1.解析HTML文件,创建DOM树

自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载)。

2.解析CSS

优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式;
特定级:id数*100+类或伪类数*10+tag名称*1

3.将CSS与DOM合并,构建渲染树(renderingtree)

DOM树与HTML一一对应,渲染树会忽略诸如head、display:none的元素

4.布局和绘制,重绘(repaint)和重排(reflow)

重排:若渲染树的一部分更新,且尺寸变化,就会发生重排;
重绘:部分节点需要更新,但不改变其他集合形状。如改变某个元素的颜色,就会发生重绘。 

附:

1.重绘和重排何时会发生:

(1)增加或删除DOM节点;
(2)display:none(重排并重绘);visibility:hidden(重排);
(3)移动页面中的元素;
(4)增加或修改样式;
(5)用户改变窗口大小,滚动页面等。

2.如何减少重绘和重排以提升页面性能:

(1)不要一个个修改属性,应通过一个class来修改

错误写法:div.style.width="50px";div.style.top="60px";
正确写法:div.className+=" modify";

(2)clone节点,在副本中修改,然后直接替换当前的节点;
(3)若要频繁获取计算后的样式,请暂存起来;
(4)降低受影响的节点:在页面顶部插入节点将影响后续所有节点。而绝对定位的元素改变会影响较少的元素;
(5)批量添加DOM:多个DOM插入或修改,应组成一个长的字符串后一次性放入DOM。使用innerHTML永远比DOM操作快。(特别注意:innerHTML不会执行字符串中的嵌入脚本,因此不会产生XSS漏洞)。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
javascript中强制执行toString()具体实现
Apr 27 Javascript
javascript获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
Jquery实现Div上下移动示例
Apr 23 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
详解JavaScript中基于原型prototype的继承特性
May 05 Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 Javascript
JavaScript自定义文本框光标
Mar 05 Javascript
Vue.directive 自定义指令的问题小结
Mar 04 Javascript
Vue项目引进ElementUI组件的方法
Nov 11 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
Jun 18 Javascript
微信小程序实现吸顶特效
Jan 08 Javascript
详解TypeScript中的类型保护
Apr 29 Javascript
JavaScript 函数节流详解及方法总结
Feb 09 #Javascript
jQuery实现给input绑定回车事件的方法
Feb 09 #Javascript
jQuery分页插件jquery.pagination.js使用方法解析
Feb 09 #Javascript
Bootstrap面板学习使用
Feb 09 #Javascript
详解js的异步编程技术的方法
Feb 09 #Javascript
原生JS实现简单放大镜效果
Feb 08 #Javascript
基于JavaScript实现本地图片预览
Feb 08 #Javascript
You might like
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
Python的Django框架安装全攻略
2015/07/15 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
python 实现aes256加密
2020/11/27 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
简单的JAVA编程面试题
2013/03/19 面试题
学生处主任岗位职责
2013/12/01 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
党员自我对照检查材料
2014/08/19 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
五好家庭申报材料
2014/12/20 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
会计求职信怎么写
2015/03/20 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
解析Redis Cluster原理
2021/06/21 Redis
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA