详解浏览器渲染页面过程


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 相关文章推荐
FLASH 广告之外的链接
Dec 16 Javascript
javascript函数中的arguments参数
Aug 01 Javascript
基于jquery的$.ajax async使用
Oct 19 Javascript
javascript实现动态模态绑定grid过程代码
Sep 22 Javascript
js中的json对象详细介绍
Oct 29 Javascript
JavaScript学习笔记之JS对象
Jan 22 Javascript
Bootstrap进度条学习使用
Feb 09 Javascript
js实现股票实时刷新数据案例
May 14 Javascript
浅谈vue-router2路由参数注意的问题
Nov 08 Javascript
JS基础之逻辑结构与循环操作示例
Jan 19 Javascript
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
js实现验证码干扰(动态)
Feb 23 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内核探索:变量存储与类型使用说明
2014/01/30 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
Python新手学习函数默认参数设置
2020/06/03 Python
python对execl 处理操作代码
2020/06/22 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
网络工程师的自我评价
2013/10/02 职场文书
2014升学宴答谢词
2014/01/26 职场文书
大学生评语大全
2014/04/18 职场文书
学雷锋月活动总结
2014/04/25 职场文书
社区先进事迹材料
2014/05/19 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
Python极值整数的边界探讨分析
2021/09/15 Python
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android