详解浏览器渲染页面过程


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 相关文章推荐
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
Sep 22 Javascript
script标签属性type与language使用选择
Dec 02 Javascript
我的Node.js学习之路(四)--单元测试
Jul 06 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
Nov 22 Javascript
jquery加载单文件vue组件的方法
Jun 20 jQuery
jQuery层级选择器_动力节点节点Java学院整理
Jul 04 jQuery
简单实现vue验证码60秒倒计时功能
Oct 11 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
Jan 26 Javascript
js中Array对象的常用遍历方法详解
Jan 17 Javascript
浅谈Vue.js组件(二)
Apr 09 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
May 20 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
Sep 21 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
phpQuery占用内存过多的处理方法
2013/11/13 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
JavaScript 10件让人费解的事情
2010/02/15 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
javascript实现tab响应式切换特效
2016/01/29 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
使用Python的turtle模块画国旗
2019/09/24 Python
python实现人脸签到系统
2020/04/13 Python
Python如何读写字节数据
2020/08/05 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
佳能英国官方网站:Canon UK
2017/08/08 全球购物
日语专业毕业生求职信
2013/12/04 职场文书
电工技术比武方案
2014/05/11 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
庆七一宣传标语
2014/10/08 职场文书
罗马假日观后感
2015/06/08 职场文书
公司晚宴祝酒词
2015/08/11 职场文书