详解浏览器渲染页面过程


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 相关文章推荐
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
Aug 24 Javascript
jQuery中each()方法用法实例
Dec 27 Javascript
js中不同的height, top的区别对比
Sep 24 Javascript
基于node实现websocket协议
Apr 25 Javascript
Google 地图API Map()构造器详解
Aug 06 Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 Javascript
jQuery DOM节点的遍历方法小结
Aug 15 jQuery
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
Aug 08 Javascript
vue webpack打包后图片路径错误的完美解决方法
Dec 07 Javascript
Vue通过provide inject实现组件通信
Sep 03 Javascript
JavaScript实现图片合成下载的示例
Nov 19 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入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
php获取操作系统语言代码
2013/11/04 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
python中的闭包函数
2018/02/09 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
详解Python设计模式之策略模式
2020/06/15 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
英文自荐信常用句子
2014/03/26 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
业余无线电通联Q语
2022/02/18 无线电