详解浏览器渲染页面过程


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 相关文章推荐
JS应用之禁止抓屏、复制、打印
Feb 21 Javascript
Jquery Ajax.ashx 高效分页实现代码
Oct 20 Javascript
JS获取地址栏参数的小例子
Aug 23 Javascript
jQuery避免$符和其他JS库冲突的方法对比
Feb 20 Javascript
jQuery中innerWidth()方法用法实例
Jan 19 Javascript
ES6中如何使用Set和WeakSet
Mar 10 Javascript
原生js实现无缝轮播图效果
Jan 11 Javascript
js实现淡入淡出轮播切换功能
Jan 13 Javascript
彻底解决 webpack 打包文件体积过大问题
Jul 07 Javascript
纯js实现页面返回顶部的动画(超简单)
Aug 10 Javascript
Vue.js划分组件的方法
Oct 29 Javascript
AJAX在JQuery中的应用详解
Jan 30 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
详解关于React-Router4.0跳转不置顶解决方案
2019/05/10 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python 流程控制实例代码
2009/09/25 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
python制作填词游戏步骤详解
2019/05/05 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python字典一键多值实例代码分享
2019/06/14 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
面包店的创业计划书范文
2014/01/16 职场文书
综合内勤岗位职责
2014/04/14 职场文书
药品业务员岗位职责
2014/04/17 职场文书
分享Python异步爬取知乎热榜
2022/04/12 Python
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL