详解浏览器渲染页面过程


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据option的value值快速设定初始的selected选项
Aug 13 Javascript
javascript小数计算出现近似值的解决办法
Feb 06 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 Javascript
原生js结合html5制作简易的双色子游戏
Mar 30 Javascript
Javascript中的Prototype到底是什么
Feb 16 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
Aug 24 Javascript
详解vue.js的devtools安装
May 26 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
详解@angular/cli 改变默认启动端口两种方式
Nov 29 Javascript
layui实现鼠标移动到单元格上显示数据的方法
Sep 11 Javascript
jQuery实现移动端扭蛋机抽奖
Nov 08 jQuery
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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
一个php Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php安装swoole扩展的方法
2015/03/19 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
为数据添加append,remove功能
2006/10/03 Javascript
function, new function, new Function之间的区别
2007/03/08 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
Python如何在bool函数中取值
2020/09/21 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
个人找工作的自我评价
2013/10/17 职场文书
杠杆的科学教学反思
2014/01/10 职场文书
单位工作证明
2014/10/07 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书