详解浏览器渲染页面过程


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 相关文章推荐
offsetHeight在OnLoad中获取为0的现象
Jul 22 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
Nov 20 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
Dec 28 Javascript
javascript中字体浮动效果的简单实例演示
Nov 18 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
Jan 21 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
Feb 15 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
Apr 12 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
Jul 11 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
Sep 11 Javascript
Vue路由之JWT身份认证的实现方法
Aug 26 Javascript
微信小程序JS加载esmap地图的实例详解
Sep 04 Javascript
JS面向对象之单选框实现
Jan 17 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
PHP+APACHE实现用户论证的方法
2006/10/09 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
onpropertypchange
2006/07/01 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
Python中的文件和目录操作实现代码
2011/03/13 Python
python re模块findall()函数实例解析
2018/01/19 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
python函数的作用域及关键字详解
2019/08/20 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
大学生期末自我鉴定
2014/02/01 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
建筑工程催款函
2015/06/24 职场文书
python中如何对多变量连续赋值
2021/06/03 Python
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL