详解浏览器渲染页面过程


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 相关文章推荐
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
May 07 Javascript
javascript 按回车键相应按钮提交事件
Nov 02 Javascript
aspx中利用js实现确认删除代码
Jul 22 Javascript
jquery调用asp.net 页面后台的实现代码
Apr 27 Javascript
JQuery中extend使用介绍
Mar 13 Javascript
jquery使用jxl插件导出excel示例
Apr 14 Javascript
jquery实现文本框textarea自适应高度
Mar 09 Javascript
AngularJS入门教程之过滤器详解
Aug 19 Javascript
详解jquery easyui之datagrid使用参考
Dec 05 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 Javascript
JavaScript监听键盘事件代码实现
Jun 03 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设计模式 Singleton(单例模式)
2011/06/26 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
python实现查询苹果手机维修进度
2015/03/16 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
python使用smtplib模块发送邮件
2020/12/17 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
兼职学生的自我评价
2013/11/24 职场文书
公司业务员岗位职责
2014/03/18 职场文书
联欢晚会主持词
2014/03/25 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang