详解浏览器渲染页面过程


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 arguments 传递给函数的隐含参数
Aug 21 Javascript
JavaScript 面向对象的之私有成员和公开成员
May 04 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
May 23 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
Mar 13 Javascript
jQuery插件StickUp实现网页导航置顶
Apr 12 Javascript
JS实现选项卡实例详解
Nov 17 Javascript
JavaScript使用Range调色及透明度实例
Sep 25 Javascript
jQuery模拟淘宝购物车功能
Feb 27 Javascript
Vue框架中正确引入JS库的方法介绍
Jul 30 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
Sep 18 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
Oct 08 Javascript
夯基础之手撕javascript继承详解
Nov 09 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新手上路(十三)
2006/10/09 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
keras 如何保存最佳的训练模型
2020/05/25 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
工商管理本科毕业生求职信范文
2013/10/05 职场文书
工作疏忽检讨书
2014/01/25 职场文书
创新比赛获奖感言
2014/02/13 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
大学社团活动总结
2014/04/26 职场文书
个人授权委托书模板
2014/09/14 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
雨中的树观后感
2015/06/03 职场文书
办公室管理规章制度
2015/08/04 职场文书
企业安全生产规章制度
2015/08/06 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers