详解浏览器渲染页面过程
详解浏览器渲染页面过程
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漏洞)。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
浏览器加载、渲染和解析过程黑箱简析
用 Fiddler 监控,在 IE6 下,资源下载顺序为: 很明显,下载顺序从上到下,文档流中先出现的资源先下载.在 IE8, Safari, Chrome 等浏览器下也类似. Firefox 对下载顺序做了优化:Firefox 会将 js, css 提前下载,而将图片等资源延迟到后面下载. 对于渲染,利用 Fiddler 将网速调慢,可以看到 css 下载后会马上渲染到页面,渲染和下载同步进行.js 的解析和运行,也类似. 对于 js 运行,以及页面加载相关事件的触发,特别做了测试.在 Fir
-
详解浏览器渲染页面过程
详解浏览器渲染页面过程 1.解析HTML文件,创建DOM树 自上而下,遇到任何样式(link.style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载). 2.解析CSS 优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式: 特定级:id数*100+类或伪类数*10+tag名称*1 3.将CSS与DOM合并,构建渲染树(renderingtree) DOM树与HTML一一对应,渲染树会忽略诸如head.display:none的元素
-
ffmpeg播放器实现详解之框架搭建过程
ffplay是ffmpeg源码中一个自带的开源播放器实例,同时支持本地视频文件的播放以及在线流媒体播放,功能非常强大. FFplay: FFplay is a very simple and portable media player using the FFmpeg libraries and the SDL library. It is mostly used as a testbed for the various FFmpeg APIs. ffplay中的代码充分调用了ffmpeg中的函
-
详解浏览器的缓存机制
目录 前言 1 浏览器缓存 1.1 浏览器缓存 1.2 浏览器缓存的意义 2 缓存类型 2.1 第一次请求数据 2.2 强制缓存 2.3 协商缓存 2.4 强制缓存和协商缓存的关系 3 缓存相关header 3.1 强制缓存 3.2 协商缓存 3.3 缓存请求 4 实例分析 4.1 官网首页: 4.2 社区 4.3 云市场 4.4 个人中心 4.5 论坛 4.6 App 总结 前言 浏览器缓存是前端性能优化的重要一环,对于前端效率提升的重要性,不言而喻. 之前对于浏览器缓存也是一知半解,这次借着
-
详解vue3.x页面功能拆分方式
目录 一. 组件 二.混入 三.api 四.vuex vue3.x相对比vue2.x主要的应用区别在于setup的使用,这个也是vue3.x的特色,所有的功能都得通过vue钩子引入使用,因为 setup 语法糖环境是不支持 this 的,这种开发方式有点回到原始的感觉,针对小项目还好,但如果页面模块功能复杂,如果都放到一个文件里堆叠,不仅会造成可读性差,而且时间长了难以维护,所以这就需要进行按功能拆分了,方式同vue2.x一样,一个是按照组件拆分,一个是混入处理,还有就是通过vuex或api分离
-
详解如何让页面与 iframe 进行通信
目录 引言 iframe 向父级页面发送消息 父级页面向 iframe 发送消息 接收消息 指定发送消息的域名 引言 这篇文章介绍如何实现页面与 iframe 进行通信,实际工作中可能很难遇到,但一旦遇到了,我们要能够立即想到怎样去实现. iframe 向父级页面发送消息 在 iframe 页面,使用 window.parent 调用 postMessage 方法,即可发送消息给父级页面. window.parent.postMessage(message, '*'); message 只能是
-
详解Next.js页面渲染的优化方案
在过去一年的工作中我所使用的js框架是Next.js,尽管这个框架在前后端同构方面有着绝佳的体验,但是当页面js文件过大以及preload过多的时候还是会出现页面跳转卡顿和渲染阻塞等比较糟糕的用户体验问题.由于我之前既不知道这个框架的工作原理,自然也就不知道如何去优化它.乘着农历春节前工地活少所以稍微研究一下. 第一个问题:宣称前后台同构的Next.js为何会出现卡顿现象? Next.js 中的特有生命周期hook 函数 getInitialProps会在页面渲染的时候判断浏览器是否为首次渲染,
-
详解ASP.NET 页面之间传值的几种方式
开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有3-5年经验的,有5-10年经验的,对于所有的面试者,我几乎问了同一道题:"请说说你所知道的页面之间传值的几种形式和方法,并阐述他们的原理和过程",关于这道题,从大家的回答来看,结果并不是很理想,从种类上来说,大部分人回答5种左右,极少部分能回答8种,没有超过8种的,但从深度上来说,很少有
-
详解JS判断页面是在手机端还是在PC端打开的方法
我们想要的效果是pc文件和mobile文件统一入口,适配不同的设备. 先看看项目的目录: 在index.html里面配置js控制选择那一个文件夹下的文件就可以了. 我们要利用:Navigator 对象,Navigator 对象包含有关浏览器的信息. index.html很简单,直接上码吧: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="vi
-
详解vue-cli多页面工程实践第1/2页
本文介绍了vue-cli多页面工程实践,分享给大家,具体如下: src目录结构 因为是自定义的设置,src下的目录结构需要固定,约定大于配置嘛. src目录结构: src/ components/ modules/ # 多页面 index/ # index 单页面 index.html main.js # 入口文件 page1/ index.html main.js group/ page2/ index.html main.js build中的配置 utils.js 增加: // match
-
详解vue之页面缓存问题(基于2.0)
比如有一个列表页面,然后列表每项都有一个详情,之前用vue1.x的时候,页面缓存基本没有什么问题. 在vue2.0中出现了列表页面是每次都重新加载数据,但是详情页面却只在第一次加载的时候调用数据,如果返回到列表再进入详情那么页面是不会重新渲染页面,可能是新手吧,这个问题困扰了我很久,一直没有办法解决-- 根据vue-router的官方文档所说, watch: { // 如果路由有变化,会再次执行该方法 '$route': 'fetchData' } 按照这样写了,但是页面还是没有渲染 . . .
随机推荐
- vbs脚本 加密 几个小细节小结下
- VBS教程:函数-Split 函数
- 在Oracle中导入dmp文件的方法
- JS基于FileSystemObject创建一个指定路径的TXT文本文件
- AJAX客户端说明,XMLHttpRequest对象
- C语言实现字符串匹配KMP算法
- 网站繁简切换的JS遇到页面卡死的解决方法
- Android 创建/验证/删除桌面快捷方式(已测试可用)
- Myeclipse连接mysql数据库心得体会
- svg动画之动态描边效果
- JavaScript操作XML文件之XML读取方法
- 网络监管刻不容缓 重塑网站构建价值观
- java开发微信分享到朋友圈功能
- Android App中使用ListFragment的实例教程
- Android GestureDetector手势滑动使用实例讲解
- C#关于System.Collections空间详解
- Android开发实现可拖动排序的ListView功能【附源码下载】
- Vue.js 2.0和Cordova开发webApp环境搭建方法
- Python异常处理操作实例详解
- python 提取文件指定列的方法示例