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

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

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

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

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

    可以得知,此时DOM树至少已经解析完成到了h1那里,而此时css还没加载完成,也就说明,css并不会阻塞DOM树的解析。 2.css加载会阻塞DOM树的渲染吗?...所以我干脆就先把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

    浏览器的渲染阻塞

    浏览器渲染的步骤 (1)浏览器解析HTML标记去构造DOM树(DOM = Document Object Model 文档对象模型) (2)解析CSS去构造CSSOM树( CSSOM = CSS Object...Model CSS对象模型) (3)将DOM和CSSOM树结合成渲染树之前,JS文件被解析和执行 阻塞渲染树的部分 (1)阻塞渲染的CSS 在构造CSSOM时,所有的CSS都会被下载,无论它们是否在当前页面中被使用...为了解决这个渲染阻塞,将关键CSS内嵌入页面中,即将最重要的(首次加载时可见的部分页面所使用到的)style写入head中,移除没用到的CSS 那么如何找出没用到的CSS的呢 使用Pagespeed...Insight 去得到像未使用的CSS,阻塞渲染的CSS和JS文件等等的统计数据 使用Gulp任务,如gulp-uncss,或是使用Grunt 任务,如grunt-uncss (2)渲染阻塞的JavaScript...只有在该脚本执行完毕后,HTML渲染才会继续进行 所以建议在页面底部引入js,去除非必要的js引用

    75940

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

    默认情况下,CSS 被视为阻塞渲染的资源,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。请务必精简您的 CSS,尽快提供它,并利用媒体类型和查询来解除对渲染阻塞。...默认情况下,CSS 被视为阻塞渲染的资源。 我们可以通过媒体类型和媒体查询将一些 CSS 资源标记为不阻塞渲染。 浏览器会下载所有 CSS 资源,无论阻塞还是不阻塞。 ?...浏览器将阻塞渲染,直至 DOM 和 CSSOM 全都准备就绪。 CSS 是阻塞渲染的资源。需要将它尽早、尽快地下载到客户端,以便缩短首次渲染的时间。...如果这些资源不阻塞渲染,该有多好。...根据网页加载时设备的方向,portrait.css 可能阻塞渲染,也可能不阻塞渲染。 最后一个声明只在打印网页时应用,因此网页首次在浏览器中加载时,它不会阻塞渲染

    89921

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

    可能大家都知道,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?接下来,我们就一起来分析一下。 原理解析 那么为什么会出现上面的现象呢?...因此,CSS加载是会阻塞Dom的渲染的。 由于js可能会操作之前的Dom节点和css样式,因此浏览器会维持html中css和js的顺序。因此,样式表会在后面的js执行前先加载执行完毕。...所以css会阻塞后面js的执行。 DOMContentLoaded 对于浏览器来说,页面加载主要有两个事件,一个是DOMContentLoaded,另一个是onLoad。...那么,正如我们上面讨论过的,css会阻塞Dom渲染js执行,而js阻塞Dom解析。...总结 由上所述,我们可以得出以下结论: css加载不会阻塞DOM树的解析 css加载会阻塞DOM树的渲染 css加载会阻塞后面js语句的执行 因此,为了避免让用户看到长时间的白屏时间,我们应该尽可能的提高

    4.8K40

    什么情况下会阻塞DOM渲染

    阻塞发生的情况遇到script标签加载js的时候会加载js并且执行完毕才开始渲染遇到alert会阻塞css加载不会阻塞DOM树的解析,但css加载会阻塞DOM树(render树)的渲染同时css加载 也会阻塞后面...js语句的执行总结就是 解析遇到link、script、img标签时,浏览器会向服务器发送请求资源。...script的加载或者执行都会阻塞html解析、其他下载线程以及渲染线程。link加载完css后会解析为CSSOM(层叠样式表对象模型,一棵仅含有样式信息的树)。...css的加载和解析不会阻塞html的解析,但会阻塞渲染。img的加载不会阻塞html的解析,但img加载后并不渲染,它需要等待Render Tree生成完后才和Render Tree一起渲染出来。...未下载完的图片需等下载完后才渲染。解决办法1.合理的使用缓存2.考虑 cdn加速3.减少http请求数4.注意 引入 外部 css和js文件的为位置

    9010

    爬虫遇到js动态渲染问题

    爬虫遇到js动态渲染问题 时间:2020年6月3日10:28:48 作者:钟健 概要:关于scrapy爬虫应对网页JavaScript动态渲染问题 关键字:scrapy crapy-splash...一、传统爬虫的问题 scrapy爬虫与传统爬虫一样,都是通过访问服务器端的网页,获取网页内容,最终都是通过对于网页内容的分析来获取数据,这样的弊端就在于他更适用于静态网页的爬取,而面对js渲染的动态网页就有点力不从心了...,因为通过js渲染出来的动态网页的内容与网页文件内容是不一样的。...做的动态渲染,所有数据都在js中间,这就使我们无法对于网页的结构进行分析来进行爬取数据 那我们如何,获取到它实际显示的页面,然后对页面内容进行分析呢?...其实大部分的动态网页的渲染,都存在与数据端进行请求交互数据,当然也存在一些,直接把数据存在js中间,然后再通过js渲染到网页上,这时候scrapy-splash就可以发挥价值了,尤其是在一些验证码,图形验证方面更加突出

    2K20

    再谈DOMContentLoaded与渲染阻塞—分析html页面事件与资源加载

    所以就造成外部资源阻塞渲染,如CSS 与 JavaScript 默认情况下,CSS 被视为阻塞渲染的资源,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。...默认情况下,CSS 被视为阻塞渲染的资源,存在阻塞的 CSS 资源时,浏览器会延迟 JavaScript 的执行和 DOM 构建,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。...总结如下: css加载不会阻塞DOM树的解析 css加载会阻塞DOM树的渲染 css加载会阻塞后面js语句的执行 css会阻塞js,同理,css也会阻塞img解码、paint(浏览器认为你的CSS没有加载完毕...css阻塞优化: 还可以用媒体类型(media type)和媒体查询(media query)来解除对渲染阻塞。...故而我们需要无阻塞加载脚本的技术。 js阻塞优化 因为:脚本执行和渲染DOM的并发可能会引发严重的冲突(脚本可以修改DOM) 所以:JavaScript引擎和渲染引擎所在的两个线程被设计为互斥的!

    5K150

    再谈DOMContentLoaded与渲染阻塞—分析html页面事件与资源加载

    所以就造成外部资源阻塞渲染,如CSS 与 JavaScript 默认情况下,CSS 被视为阻塞渲染的资源,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。...默认情况下,CSS 被视为阻塞渲染的资源,存在阻塞的 CSS 资源时,浏览器会延迟 JavaScript 的执行和 DOM 构建,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。...总结如下: css加载不会阻塞DOM树的解析 css加载会阻塞DOM树的渲染 css加载会阻塞后面js语句的执行 css会阻塞js,同理,css也会阻塞img解码、paint(浏览器认为你的CSS没有加载完毕...css阻塞优化: 还可以用媒体类型(media type)和媒体查询(media query)来解除对渲染阻塞。...故而我们需要无阻塞加载脚本的技术。 js阻塞优化 因为:脚本执行和渲染DOM的并发可能会引发严重的冲突(脚本可以修改DOM) 所以:JavaScript引擎和渲染引擎所在的两个线程被设计为互斥的!

    2.1K20

    前端渲染引擎doT.js解析

    但在一些只需完成数据和模板简单渲染的场合,它们就显得笨重而且学习成本较高了。...解决这个问题的模板引擎有很多,doT.js(出自女程序员Laura Doktorova之手)是其中非常优秀的一个。下表将doT.js与其他同类引擎做了对比: ? 可以看出,doT.js表现突出。...源码分析及实现原理 和后端渲染不同,doT.js渲染完全交由前端来进行,这样做主要有以下好处: 脱离后端渲染语言,不需要依赖后端项目的启动,从而降低了开发耦合度、提升开发效率; View层渲染逻辑全在...通过源码分析之后发现jQuery-tmpl的模板缓存并不是对模板编译结果进行缓存,并且会造成多次执行渲染时产生多次编译,再加上代码with性能消耗,严重拖慢整个渲染过程。...源码中没有用到with这类消耗性能的语句,与此同时doT.js选择先将模板编译结果返回给开发者,这样如要重复多次使用同一模板进行渲染便不会反复编译。

    3K40
    领券