首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浏览器渲染阻塞

浏览器渲染的步骤 (1)浏览器解析HTML标记去构造DOM树(DOM = Document Object Model 文档对象模型) (2)解析CSS去构造CSSOM树( CSSOM = CSS Object...Model CSS对象模型) (3)将DOM和CSSOM树结合成渲染树之前,JS文件被解析和执行 阻塞渲染树的部分 (1)阻塞渲染的CSS 在构造CSSOM时,所有的CSS都会被下载,无论它们是否在当前页面中被使用...Insight 去得到像未使用的CSS,阻塞渲染的CSS和JS文件等等的统计数据 使用Gulp任务,如gulp-uncss,或是使用Grunt 任务,如grunt-uncss (2)渲染阻塞的JavaScript...如果在解析HTML标记时,浏览器遇到了JavaScript,解析会停止。...只有在该脚本执行完毕后,HTML渲染才会继续进行 所以建议在页面底部引入js,去除非必要的js引用

75940

JS 与 CSS 阻塞 DOM 渲染解析的情况详解

DOM 解析,但是会阻塞 DOM 渲染 首先在index.html插入如下标签,然后在浏览器输入http://127.0.0.1:3000/访问此页面。...简单阐述一下浏览器的解析渲染过程,解析DOM生成DOM Tree,解析CSS生成CSSOM Tree,两者结合生成render tree渲染树,最后浏览器根据渲染渲染至页面。...但是首先要思考下是什么阻塞了DOM的解析,刚刚已经证明了CSS不会阻塞DOM的解析,所以只可能是JS阻塞了DOM解析。但是JS只有两行代码,不会阻塞长达3s左右的时间。...而这个结论才是解释为何CSS会阻塞JS的执行的真正原因,浏览器无法预先知道脚本的具体内容,因此在碰到标签时,只好先渲染一次页面,确保脚本内能获取到DOM的最新的样式。...CSS不会阻塞DOM解析,但是会阻塞DOM渲染,严谨一点则是CSS会阻塞render tree的生成,进而会阻塞DOM的渲染 JS阻塞DOM解析 CSS会阻塞JS的执行 浏览器遇到标签且没有

2.1K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS阻塞渲染,这么多年我理解错啦?

    在中文社区,这么多年一直流传一个说法: JS线程负责执行JS,GUI渲染线程负责渲染,这两者是互斥的,所以JS执行时会阻塞渲染。 但随着Dev Tools使用的增多,逐渐开始怀疑以上说法。...本文会以实际案例来解释为什么JS阻塞渲染。...Main记录渲染进程的主线程中的任务 从这个角度看,浏览器实际的线程情况与那些GUI线程相关的文章描述的并不相同。...可以发现,具体的绘制操作是交由合成线程完成,他与JS所在线程(主线程)并不是互斥的。 JS为啥阻塞渲染 我们现在知道,JS执行与Paint任务都发生在主线程。...可以看到,有个JS执行时长达到231.88ms,超过了一帧的时间,在此期间主线程就没时间执行Paint了: 总结 JS之所以阻塞渲染,是因为JS执行与「渲染相关任务」都在争夺主线程有限的资源。

    1.9K41

    js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染

    效果见下图 5.gif 个人对这种机制的评价 其实我觉得,这可能也是浏览器的一种优化机制。...所以我干脆就先把DOM树的结构先解析完,把可以做的工作做完,然后等你css加载完之后,在根据最终的样式来渲染DOM树,这种做法性能方面确实会比较好一点。 3.css加载会阻塞js运行吗? ​...由上面的推论,我们可以得出,css加载不会阻塞DOM树解析,但是会阻塞DOM树渲染。那么,css加载会不会阻塞js执行呢? 同样,通过代码来验证. <!...这也就说明了,css加载会阻塞后面的js语句的执行。详细结果看下图(css加载用了5600+ms): ?....png](/img/bVbf3O2) 结论 由上所述,我们可以得出以下结论: 1.css加载不会阻塞DOM树的解析 2css加载会阻塞DOM树的渲染 3css加载会阻塞后面js语句的执行、 因此,为了避免让用户看到长时间的白屏时间

    2.3K20

    【总结】关于 JS 与 CSS 是否阻塞 DOM 的渲染和解析

    DOM 解析,但是会阻塞 DOM 渲染 首先在index.html插入如下标签,然后在浏览器输入http://127.0.0.1:3000/访问此页面。...简单阐述一下浏览器的解析渲染过程,解析DOM生成DOM Tree,解析CSS生成CSSOM Tree,两者结合生成render tree渲染树,最后浏览器根据渲染渲染至页面。...但是首先要思考下是什么阻塞了DOM的解析,刚刚已经证明了CSS不会阻塞DOM的解析,所以只可能是JS阻塞了DOM解析。但是JS只有两行代码,不会阻塞长达3s左右的时间。...而这个结论才是解释为何CSS会阻塞JS的执行的真正原因,浏览器无法预先知道脚本的具体内容,因此在碰到标签时,只好先渲染一次页面,确保脚本内能获取到DOM的最新的样式。...CSS不会阻塞DOM解析,但是会阻塞DOM渲染,严谨一点则是CSS会阻塞render tree的生成,进而会阻塞DOM的渲染 JS阻塞DOM解析 CSS会阻塞JS的执行 浏览器遇到标签且没有

    1.4K10

    前端优化--阻塞渲染的CSS

    默认情况下,CSS 被视为阻塞渲染的资源。 我们可以通过媒体类型和媒体查询将一些 CSS 资源标记为不阻塞渲染浏览器会下载所有 CSS 资源,无论阻塞还是不阻塞。 ?...浏览器阻塞渲染,直至 DOM 和 CSSOM 全都准备就绪。 CSS 是阻塞渲染的资源。需要将它尽早、尽快地下载到客户端,以便缩短首次渲染的时间。...最后一个样式表声明提供由浏览器执行的“媒体查询”:符合条件时,浏览器阻塞渲染,直至样式表下载并处理完毕。...根据网页加载时设备的方向,portrait.css 可能阻塞渲染,也可能不阻塞渲染。 最后一个声明只在打印网页时应用,因此网页首次在浏览器中加载时,它不会阻塞渲染。...最后,请注意“阻塞渲染”仅是指浏览器是否需要暂停网页的首次渲染,直至该资源准备就绪。无论哪一种情况,浏览器仍会下载 CSS 内容,只不过不阻塞渲染的资源优先级较低罢了。

    89921

    浏览器渲染原理

    浏览器渲染流程 接下来我们从一个简单的html页面来谈浏览器渲染流程: 5.1 构建 DOM 树 DOM解析的特点,是不会被阻塞的。...当解析器发现非阻塞资源,例如一张图片,浏览器会请求这些资源并且继续解析。...当遇到一个CSS文件时,解析也可以继续进行,但是对于标签(特别是没有 async 或者 defer 属性)会阻塞渲染并停止HTML的解析。 浏览器构建DOM树时,这个过程占用了主线程。...image-20220125130801294 渲染引擎会把获取到的 CSS 文本全部转换为 styleSheets 结构中的数据,并且该结构同时具备了查询和修改功能,这会为后面使用JS的样式操作提供基础...6.2 更新元素的绘制属性(重绘) 比如通过JS更改某些元素的背景颜色,渲染流水的调整参见下图: image-20220125191355914 修改元素的背景色,布局阶段不会执行,因为「没有引起几何位置的变换

    1.1K20

    关于浏览器渲染VM_ xxx.js的问题

    ,发现js的冲突问题比较严重。...在修改js的过程中,发现即便处理了不同js之间的冲突,仍然会有程序上的问题,尤其是在有 eval 语句的js中,会在浏览器再度渲染。...#rdaaa 位于index123.js image.png 但调试过程中,在这个下面出现了第二次js渲染,有一个vm1856 _ index123.js ,接着我发现这个vm后面的数字是会变化的...image.png image.png 这个时候我检查年限和账号的加减,发现vm 后面的数字都是不一样的,指向同样的js行,以下是js 43行的内容 image.png 这个时候我就思考什么情况下会渲染...小结: 1.遇到vm开头的js并不是所有的都不能解决,先不要慌 2.多多注意报错信息,多用debug断点调试 3.可以通过禁用其他js的方式来排查 4.如果有多次执行的情况,可以优先考虑js冲突或重复引用

    1.9K50

    浏览器渲染原理

    浏览器的内核是指支持浏览器运行的最核心的程序,分为JS引擎和渲染引擎两个部分。 页面加载完成的过程 在网页的地址栏中输入url后,浏览器经历了什么样的过程?...渲染树只会包括需要显示的节点和这些节点的样式信息,如果某个节点是display: none的样式,那就不会构建到渲染树中。 那么,浏览器渲染过程中遇到JS文件会怎么处理?...在渲染过程中,如果遇到就停止渲染,执行JS代码。因为浏览器有GUI渲染线程和JS引擎线程,这两个线程是互斥的,JavaScript的加载、解析和执行会阻塞渲染。...JS文件不止会阻塞DOM的构建,也会导致CSSOM的构建。不完整的CSSOM是无法使用的,JavaScript想要访问CSSOM并更改它,就必须得到完整的CSSOM。...async属性,对于没有任何依赖的js文件可以使用,表示JS文件下载和解析不会阻塞渲染

    1K20

    浏览器渲染机制

    为了提高浏览器渲染性能,通常的手段是保证渲染流程不被阻塞,避免不必要的绘制计算和重排重绘,利用 GPU 硬件加速等技术来提高渲染性能。 知识点深入 1....如果不想因 JS 阻塞 HTML 的解析,可以为 script 标签添加 defer 属性或将 script 放在 body 结束标签之前,浏览器会在最后执行 JS 代码,避免阻塞 DOM 构建。...但 CSSOM 会阻塞 JS 的执行,因为 JS 可能会操作样式信息。虽然 CSSOM 不会阻塞 DOM 的构建,但在进入下一阶段之前,必须等待 CSSOM 构建完成。...浏览器渲染性能的优化 上一节中是一轮典型的浏览器渲染流程,在流程完成之后,DOM、CSSOM、LayoutObject、PaintLayer 等各种树状数据结构都会保留下来,以便在用户操作、网络请求、JS...2.2 优化影响渲染的资源 在浏览器解析 HTML 的过程中,CSS 和 JS 都有可能对页面的渲染造成影响。优化方法包括以下几点: 关键 CSS 资源放在头部加载。 JS 通常放在页面底部。

    1.1K31

    浏览器渲染流程

    其中浏览器渲染机制是前端性能优化的关键,弄浏览器在背后做了什么,才能在明白如何优化。 浏览器解析 DOM DOM对象是浏览器解析HTML脚本生成的,最终输出一个树状结构的对象。...RenderTree DOM 与 CSSOM 融合成一棵RenderTree(渲染树),随后计算每个可见元素的布局,并输出给绘制过程,在屏幕上渲染像素。...优化这里的每一步对实现最佳渲染性能至关重要。 构建的过程如下: 布局 有了渲染树,就进入布局阶段。...根据渲染树种确定的每个DOM元素的样式规则,浏览器就能具体计算每个DOM元素最终在屏幕上显示的大小位置,宽高等等几何属性。...这期间会产生多个图层 合并渲染层 来到这里,浏览器渲染过程就接近尾声。每个图层绘制完,浏览器会将其按照合理的顺序合并到同一图层,并显示在浏览器上。

    48330

    浏览器渲染原理

    浏览器是如何渲染页面的? 当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。 在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务,开启渲染流程。...这样,整个渲染流程就形成了一套组织严密的生产流水线。 渲染的第一步是解析 HTML。 解析过程中遇到 CSS 解析 CSS,遇到 JS 执行 JS。...为了提高解析效率,浏览器在开始解析前,会启动一个预解析的线程,率先下载 HTML 中的外部 CSS 文件和 外部的 JS 文件。...这就是 CSS 不会阻塞 HTML 解析的根本原因。 如果主线程解析到script位置,会停止解析 HTML,转而等待 JS 文件下载好,并将全局代码解析执行完成后,才能继续解析 HTML。...这是因为 JS 代码的执行过程可能会修改当前的 DOM 树,所以 DOM 树的生成必须暂停。这就是 JS阻塞 HTML 解析的根本原因。

    51210

    浏览器渲染原理

    作者:王少飞 浏览器工作大致流程 废话少说,先来看个图: 从上面这个图中,我们可以看到那么几个事: 1)浏览器会解析三个东西: 一个是HTML/SVG/XHTML,事实上,Webkit有三个C++的类对应这三类文档...注意: Rendering Tree 渲染树并不等同于DOM树,因为一些像Header或display:none的东西就没必要放在渲染树中了。...渲染 渲染的流程基本上如下(黄色的四个步骤): 计算CSS样式 构建Render Tree Layout – 定位坐标和大小,是否换行,各种position, overflow, z-index属性 …...一般来说,浏览器会把这样的操作积攒一批,然后做一次reflow,这又叫异步reflow或增量异步reflow。但是有些情况浏览器是不会这么做的,比如:resize窗口,改变了页面默认的字体,等。...对于这些操作,浏览器会马上进行reflow。

    2.7K31

    浏览器渲染原理

    注意: Rendering Tree 渲染树并不等同于DOM树,因为一些像Header或display:none的东西就没必要放在渲染树中了。...渲染 渲染的流程基本上如下(黄色的四个步骤): 计算CSS样式 构建Render Tree Layout – 定位坐标和大小,是否换行,各种position, overflow, z-index属性...一般来说,浏览器会把这样的操作积攒一批,然后做一次reflow,这又叫异步reflow或增量异步reflow。但是有些情况浏览器是不会这么做的,比如:resize窗口,改变了页面默认的字体,等。...对于这些操作,浏览器会马上进行reflow。...Chrome下,Google的SpeedTracer是个非常强悍的工作让你看看你的浏览渲染的成本有多大。其实Safari和Chrome都可以使用开发者工具里的一个Timeline的东东。

    49020

    浏览器渲染原理】

    渲染引擎下边还有很多子模块: 网络模块:负责网络请求 JS解析器:解析和执行js代码 … 渲染引擎也称内核是浏览器的核心。 2....但这一个进程也有多个线程: 页面线程:负责页面渲染和展示 JS线程:执行js代码 还有其他各种线程 但是单进程结构有几个问题: ① 不稳定:其中一个线程卡死,会导致整个进程出问题。...渲染器进程接收到的数据,也就是HTML,渲染器进程的核心任务就是把HTML、CSS、JS、静态资源等,资源渲染成用户可以交互的Web页面: 构造DOM树:渲染器进程的主进程将html进行解析,通过词法分析...html的解析,不会影响DOM结构的生产; js阻塞:但是在解析过程中遇到script标签时,就会停止html解析,转而去加载解析并执行js(因为浏览器并不知道当前的js操作会不会改变当前的html...若在上一帧的js还没有执行完,就滚动到了下一帧,会导致下一帧动画没有及时渲染,就会造成页面卡顿。

    71220

    浏览器渲染原理

    浏览器工作大致流程 废话少说,先来看个图: 从上面这个图中,我们可以看到那么几个事: 1)浏览器会解析三个东西: 一个是HTML/SVG/XHTML,事实上,Webkit有三个C++的类对应这三类文档。...注意: Rendering Tree 渲染树并不等同于DOM树,因为一些像Header或display:none的东西就没必要放在渲染树中了。...渲染 渲染的流程基本上如下(黄色的四个步骤): 计算CSS样式 构建Render Tree Layout – 定位坐标和大小,是否换行,各种position, overflow, z-index属性 …...一般来说,浏览器会把这样的操作积攒一批,然后做一次reflow,这又叫异步reflow或增量异步reflow。但是有些情况浏览器是不会这么做的,比如:resize窗口,改变了页面默认的字体,等。...对于这些操作,浏览器会马上进行reflow。

    1.1K00

    CSS到底会不会阻塞页面渲染

    可能大家都知道,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?接下来,我们就一起来分析一下。 原理解析 那么为什么会出现上面的现象呢?...我们从浏览器渲染过程来解析下。 不同的浏览器使用的内核不同,所以他们的渲染过程也是不一样的。目前主要有两个 webkit渲染过程 ? Gecko渲染过程 ?...因此,CSS加载是会阻塞Dom的渲染的。 由于js可能会操作之前的Dom节点和css样式,因此浏览器会维持html中css和js的顺序。因此,样式表会在后面的js执行前先加载执行完毕。...所以css会阻塞后面js的执行。 DOMContentLoaded 对于浏览器来说,页面加载主要有两个事件,一个是DOMContentLoaded,另一个是onLoad。...那么,正如我们上面讨论过的,css会阻塞Dom渲染js执行,而js阻塞Dom解析。

    4.8K40

    浏览器学习之渲染原理与渲染优化

    浏览器渲染过程 浏览器渲染主要有以下步骤: 首先解析收到的文档,根据文档定义构建一颗DOM树,DOM树是由DOM元素及属性节点组成的 然后对CSS进行解析,生成CSSOM规则树 根据DOM树和CSSOM...当渲染对象被创建并添加到树中,它们并没有位置和大小,所以当浏览器生成渲染树以后,就会根据渲染树来进行布局(又称回流)。这一阶段浏览器要做的事情就是要弄清各个节点在页面中的确切位置和大小。...它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容 浏览器渲染优化 (1) 针对JavaScript: JavaScript既会阻塞HTML的解析,也会阻塞CSS的解析。...,还有两种就是使用async属性和defer属性来异步引入,两者都是去异步加载外部的JS文件,不会阻塞DOM的解析 script立即停止页面渲染去加载资源文件,当资源加载完毕后立刻执行JS代码,JS代码执行完毕后继续渲染页面...,浏览器为了用户体验,会使用浏览器默认样式,确保首次渲染的速度。

    1.1K31
    领券