详解浏览器渲染页面过程


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的内存泄漏
Mar 04 Javascript
jquery时间下拉框小例子
Apr 15 Javascript
jquery二级导航内容均分的原理及实现
Aug 13 Javascript
通过action传过来的值在option获取进行验证的方法
Nov 14 Javascript
深入理解Javascript作用域与变量提升
Dec 09 Javascript
JavaScript通过字符串调用函数的实现方法
Mar 18 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
Sep 07 Javascript
JavaScript继承模式粗探
Jan 12 Javascript
在Node.js中使用Javascript Generators详解
May 05 Javascript
jQuery实现简单倒计时功能的方法
Jul 04 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
Apr 21 Javascript
uni-app实现获取验证码倒计时功能
Nov 01 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
配置支持SSI
2006/11/25 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
php实现分页工具类分享
2014/01/09 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
jQuery编写QQ简易聊天框
2020/08/27 jQuery
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
python字符串中的单双引
2017/02/16 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
Python中的上下文管理器和with语句的使用
2018/04/17 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
python入门之井字棋小游戏
2020/03/05 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
大学生农村教师实习自我鉴定
2013/09/21 职场文书
办公室助理岗位职责
2013/12/25 职场文书
作文评语集锦大全
2014/04/23 职场文书
体育运动会广播稿
2014/10/05 职场文书
老人节标语大全
2014/10/08 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python