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

消除渲染阻塞资源(灯塔)

基础概念

渲染阻塞资源(Render-Blocking Resources)是指在网页加载过程中,浏览器必须等待这些资源加载完成后才能继续渲染页面的资源。这些资源通常包括 JavaScript、CSS 文件等。渲染阻塞资源会导致页面加载时间延长,用户体验下降。

相关优势

消除渲染阻塞资源的主要优势包括:

  1. 提高页面加载速度:减少用户等待时间,提升用户体验。
  2. 优化性能:降低服务器负载,提高整体系统性能。
  3. 改善SEO:搜索引擎更喜欢快速加载的页面,有助于提升网站排名。

类型

常见的渲染阻塞资源包括:

  1. JavaScript文件:脚本文件通常会阻塞页面的渲染,直到它们完全加载和执行完毕。
  2. CSS文件:样式表文件也会阻塞页面的渲染,直到它们完全加载。
  3. 图片和其他媒体文件:虽然这些文件不会直接阻塞渲染,但它们的加载时间会影响整体页面加载速度。

应用场景

消除渲染阻塞资源的应用场景主要包括:

  1. 网页优化:提升网站性能,改善用户体验。
  2. 移动应用开发:优化移动应用的启动时间和响应速度。
  3. 单页应用(SPA):确保SPA在加载和切换页面时的流畅性。

遇到的问题及解决方法

问题:为什么会出现渲染阻塞资源?

原因

  1. 资源顺序:JavaScript文件通常放在HTML文件的底部,但如果放在头部,会阻塞页面的渲染。
  2. 资源大小:大型的CSS或JavaScript文件需要更长时间加载,导致页面渲染延迟。
  3. 网络延迟:网络状况不佳时,资源加载时间会延长,进一步阻塞页面渲染。

解决方法:

  1. 异步加载JavaScript: 使用asyncdefer属性来异步加载JavaScript文件,避免阻塞页面渲染。
  2. 异步加载JavaScript: 使用asyncdefer属性来异步加载JavaScript文件,避免阻塞页面渲染。
  3. 内联关键CSS: 将关键CSS内联到HTML文件中,确保页面在加载时能够快速渲染。
  4. 内联关键CSS: 将关键CSS内联到HTML文件中,确保页面在加载时能够快速渲染。
  5. 使用HTTP/2: HTTP/2支持多路复用,可以同时加载多个资源,减少阻塞时间。
  6. 代码分割: 将JavaScript和CSS文件分割成多个小文件,按需加载,减少初始加载时间。
  7. 代码分割: 将JavaScript和CSS文件分割成多个小文件,按需加载,减少初始加载时间。
  8. 使用CDN: 利用内容分发网络(CDN)加速资源加载,减少网络延迟。

参考链接

通过以上方法,可以有效消除渲染阻塞资源,提升网页加载速度和用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

浏览器的多线程中,有的线程负责加载资源,有的线程负责执行脚本,有的线程负责渲染界面,有的线程负责轮询、监听用户事件。 这些线程,根据浏览器自身特点以及web标准等等,有的会被浏览器特意的阻塞。...所以就造成外部资源阻塞渲染,如CSS 与 JavaScript 默认情况下,CSS 被视为阻塞渲染资源,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。...默认情况下,CSS 被视为阻塞渲染资源,存在阻塞的 CSS 资源时,浏览器会延迟 JavaScript 的执行和 DOM 构建,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。...js线程与资源进行加载的线程并不互斥,不会互斥意味着:资源的加载可以和UI渲染、重排,事件响应,或者JavaScript代码的执行的并发进行。...但是操蛋的就是,如果浏览器解析DOM时需要下载脚本资源,那么下载这个资源的线程就是阻塞其他下载线程以及渲染线程,导致渲染速度变慢。

4.9K150

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

浏览器的多线程中,有的线程负责加载资源,有的线程负责执行脚本,有的线程负责渲染界面,有的线程负责轮询、监听用户事件。 这些线程,根据浏览器自身特点以及web标准等等,有的会被浏览器特意的阻塞。...所以就造成外部资源阻塞渲染,如CSS 与 JavaScript 默认情况下,CSS 被视为阻塞渲染资源,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。...默认情况下,CSS 被视为阻塞渲染资源,存在阻塞的 CSS 资源时,浏览器会延迟 JavaScript 的执行和 DOM 构建,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。...js线程与资源进行加载的线程并不互斥,不会互斥意味着:资源的加载可以和UI渲染、重排,事件响应,或者JavaScript代码的执行的并发进行。...但是操蛋的就是,如果浏览器解析DOM时需要下载脚本资源,那么下载这个资源的线程就是阻塞其他下载线程以及渲染线程,导致渲染速度变慢。

1.8K20
  • 前端优化--阻塞渲染的CSS

    默认情况下,CSS 被视为阻塞渲染资源,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。请务必精简您的 CSS,尽快提供它,并利用媒体类型和查询来解除对渲染阻塞。...默认情况下,CSS 被视为阻塞渲染资源。 我们可以通过媒体类型和媒体查询将一些 CSS 资源标记为不阻塞渲染。 浏览器会下载所有 CSS 资源,无论阻塞还是不阻塞。 ?...浏览器将阻塞渲染,直至 DOM 和 CSSOM 全都准备就绪。 CSS 是阻塞渲染资源。需要将它尽早、尽快地下载到客户端,以便缩短首次渲染的时间。...如果这些资源阻塞渲染,该有多好。...最后,请注意“阻塞渲染”仅是指浏览器是否需要暂停网页的首次渲染,直至该资源准备就绪。无论哪一种情况,浏览器仍会下载 CSS 内容,只不过不阻塞渲染资源优先级较低罢了。

    89121

    浏览器的渲染阻塞

    浏览器渲染的步骤 (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引用

    75640

    QUIC特性之连接迁移和队头阻塞消除

    如你所知,一些资源会被渲染阻塞(render blocking)[17]。CSS文件和HTML head元素中的JavaScript会遇到这种情况。...因此,这些资源需要尽快被下载(以最高优先级)。让我们思考一下,如果A、B和C都是渲染阻塞资源会发生什么。...不过这并不意味着顺序多路复用总是最佳方法,因为一些(大部分非渲染阻塞资源(比如HTML和progressive JPEG)实际会以增量方式处理和使用。...不过,正如我们刚刚看到的,同时拥有多个并发活跃的数据流通常并不利于网络性能,因为会延迟一些关键(渲染阻塞资源,即使在没有丢包的情况下!我们宁可同时对一或两个活跃数据流使用顺序多路复用器。...比如,当资源没有渲染阻塞时;当资源以增量方式被处理时;当数据流完全独立时;或者同时发送更少的数据时。

    1.1K10

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

    可能大家都知道,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?接下来,我们就一起来分析一下。 原理解析 那么为什么会出现上面的现象呢?...然而,由于Render Tree是依赖于DOM Tree和CSSOM Tree的,所以他必须等待到CSSOM Tree构建完成,也就是CSS资源加载完成(或者CSS资源加载失败)后,才能开始渲染。...而onLoad没什么好说的,就是等待页面的所有资源都加载完成才会触发,这些资源包括css、js、图片视频等。 而DOMContentLoaded,顾名思义,就是当页面的内容解析完成后,则触发该事件。...那么,正如我们上面讨论过的,css会阻塞Dom渲染和js执行,而js会阻塞Dom解析。...总结 由上所述,我们可以得出以下结论: css加载不会阻塞DOM树的解析 css加载会阻塞DOM树的渲染 css加载会阻塞后面js语句的执行 因此,为了避免让用户看到长时间的白屏时间,我们应该尽可能的提高

    4.7K40

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

    3.这样,我们对资源的下载速度上限就会被限制成20kb/s,好,那接下来就进入我们的正题 正题 1.css加载会阻塞DOM树的解析吗? 代码举例: <!...可以得知,此时DOM树至少已经解析完成到了h1那里,而此时css还没加载完成,也就说明,css并不会阻塞DOM树的解析。 2.css加载会阻塞DOM树的渲染吗?...由上图,我们也可以看到,当css还没加载出来的时候,页面显示白屏,直到css加载完成之后,红色字体才显示出来,也就是说,下面的内容虽然解析了,但是并没有被渲染出来。所以,css加载会阻塞DOM树渲染。...由上面的推论,我们可以得出,css加载不会阻塞DOM树解析,但是会阻塞DOM树渲染。那么,css加载会不会阻塞js执行呢? 同样,通过代码来验证. <!....png](/img/bVbf3O2) 结论 由上所述,我们可以得出以下结论: 1.css加载不会阻塞DOM树的解析 2css加载会阻塞DOM树的渲染 3css加载会阻塞后面js语句的执行、 因此,为了避免让用户看到长时间的白屏时间

    2.3K20

    什么情况下会阻塞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文件的为位置

    8610

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

    另一个情况就是,虽然DOM很早就被解析完成,但是p标签却迟迟没有渲染,原因在于CSS样式还未请求完成,在样式获取后hello world才被渲染出来,所以说CSS会阻塞页面渲染。...更为严谨一点的说,CSS会阻塞render tree的生成,进而会阻塞DOM的渲染。...在这里插入图片描述 此情况好像是CSS不仅阻塞了DOM的解析,而且也阻塞了DOM渲染。...现在来解答刚才那个问题,浏览器解析DOM时,虽然会一行一行向下解析,但是它会预先加载具有引用标记的外部资源(例如带有src标记的标签),而在解析到此标签时,则无需再去加载,直接运行,以此提高运行效率...CSS不会阻塞DOM解析,但是会阻塞DOM渲染,严谨一点则是CSS会阻塞render tree的生成,进而会阻塞DOM的渲染 JS会阻塞DOM解析 CSS会阻塞JS的执行 浏览器遇到标签且没有

    2.1K31

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

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

    1.8K41

    前端资源浏览器渲染原理

    float: right} 解析步骤 构建 Render Tree 当有了DOM Tree和 CSSOM Tree后,就可以两个结合来构建Render Tree了 需要注意的是: link元素不会阻塞...DOM Tree的构建过程,但是会阻塞Render Tree的构建过程 Render Tree和DOM Tree并不是一一对应的关系,比如对于display为none的元素,压根不会出现在render...debugger console.log("hello") 新的问题: 在现在的开发模式中 大多都是使用vue和React 作为开发框架 JS 的占比往往很大 处理事件也会变长 这也导致了 如果解析阻塞...script> 建议: 将defer放入head中使用 这个属性的特性放在末尾 就本末倒置了 defer 只对外置脚本有效果 async属性 async 特性与 defer 有些类似,它也能够让脚本不阻塞页面...它的特性: 浏览器不会因 async 脚本而阻塞(与 defer 类似); async脚本不能保证顺序,它是独立下载、独立运行,不会等待其他脚本 async不会能保证在DOMContentLoaded之前或者之后执行

    56820

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

    另一个情况就是,虽然DOM很早就被解析完成,但是p标签却迟迟没有渲染,原因在于CSS样式还未请求完成,在样式获取后hello world才被渲染出来,所以说CSS会阻塞页面渲染。...更为严谨一点的说,CSS会阻塞render tree的生成,进而会阻塞DOM的渲染。...在这里插入图片描述 此情况好像是CSS不仅阻塞了DOM的解析,而且也阻塞了DOM渲染。...现在来解答刚才那个问题,浏览器解析DOM时,虽然会一行一行向下解析,但是它会预先加载具有引用标记的外部资源(例如带有src标记的标签),而在解析到此标签时,则无需再去加载,直接运行,以此提高运行效率...CSS不会阻塞DOM解析,但是会阻塞DOM渲染,严谨一点则是CSS会阻塞render tree的生成,进而会阻塞DOM的渲染 JS会阻塞DOM解析 CSS会阻塞JS的执行 浏览器遇到标签且没有

    1.4K10

    探究网页资源究竟是如何阻塞浏览器加载的

    这是布兰的第 15 篇原创 一个页面允许加载的外部资源有很多,常见的有脚本、样式、字体、图片和视频等,对于这些外部资源究竟是如何影响整个页面的加载和渲染的呢?今天我们来一探究竟。...因为如下的一些资源,比如图片、样式或者脚本体积都是 50kb 的好几倍,方便测试。 图片会造成阻塞嘛 直接写个示例来看下结果: <!...CSS 一定会阻塞 DOM 的渲染嘛?...,页面重新渲染出该字样,这就说明 CSS 阻塞 DOM 的渲染阻塞定义在 CSS 后面的 DOM。...JS 加载阻塞 CSS 会阻塞 DOM 的渲染阻塞定义在其之后的 JS 的执行,那 JS 加载会对渲染过程造成什么影响呢? <!

    2.1K30

    【JavaSE专栏79】线程死锁,多个线程被阻塞,等待彼此持有的资源

    线程死锁是指在多线程编程中,两个或多个线程被永久地阻塞,等待彼此持有的资源,而无法继续执行下去。...---- 一、什么是线程死锁 线程死锁是指在多线程编程中,两个或多个线程被永久地阻塞,等待彼此持有的资源,而无法继续执行下去,这种情况下,被阻塞的线程将无法释放它所持有的资源,导致所有的线程都无法继续工作...竞争资源:多个线程同时竞争有限的资源,当每个线程都持有部分资源并且等待其他线程释放它需要的资源时,就会发生死锁。...阻塞、等待或者睡眠:线程在等待某个操作完成或者等待其他线程的通知时,如果等待的时间过长,可能导致其他线程无法继续执行,最终导致死锁。...死锁的传播:当一个线程发生死锁,它可能会导致其他线程也被阻塞,从而形成死锁链。 死锁的循环等待:当多个线程发生循环等待的情况,每个线程都在等待其他线程所持有的资源时,可能会导致发生死锁。

    59060

    谈谈前端性能优化

    超过数量限制数目的请求会被阻塞。...我们可以考虑以下处理: 使用 CDN,避免资源放在项目的服务器上,特别是访问量大的站点,会容易奔溃或者造成资源加载缓慢,用户体验不良 资源压缩 2.1 图片资源可以使用 TinyPNG 2.2 视频...减少重绘和重排,他们会导致页面重新渲染 DOM 节点元素需要语义化,不能都一股脑的使用 DIV 元素,这样不利于 SEO;起码在对外的系统上要注重语义化的处理 老生常谈的点了:样式需要放在 ...样式靠后会使得骨架 HTML 看起来辣眼睛;脚本提前加载会造成页面阻塞。...避免 Img 节点元素的 alt 指向为空,为空不利于 SEO 工具处理 使用 Lighthouse 灯塔:它可以通过谷歌浏览器去安装使用;也可以通过本地全局安装,通过运行命令行去审查指定的页面。

    33020

    翻译 | 关键CSS和Webpack: 减少阻塞渲染的CSS的自动化解决方案

    Webpack: Automatically Minimize Render-Blocking CSS 原文作者: Anthony Gore 译者: 蜗牛(GivenCui) 校对者: veizz "消除阻塞渲染的...我们可以做很多事情来减少阻塞渲染的JavaScript,例如code splitting、tree shaking,缓存等。 但是如何减少阻塞渲染的CSS?...什么是阻塞渲染 如果资源是“阻塞渲染”的,则表示浏览器在资源下载或处理完成之前不会显示该页面。...那么,我们是否应该把link标签放到body中,以防止阻塞渲染?你可以这么做,但是阻塞渲染也不是全无优点,我们实际上可以利用它。如果页面渲染时没有加载任何CSS,我们会遇到丑陋的"内容闪现"。 ?...其关键在于,preload不阻塞渲染,无论资源是否加载完成,浏览器都会接着绘制页面。 link标签中的onload属性允许我们在非关键CSS加载完成时运行脚本。

    1.9K80

    前端不止:Web性能优化 - 关键渲染路径以及优化策略

    CSS 被视为阻塞渲染资源,这意味着浏览器将不会渲染任何已处理的内容,直至 CSSOM 构建完毕。 ?...这一点对于HTML来说,非常关键,HTML作为渲染的关键资源消除或者延迟加载肯定不太可能(这里指的是非局部渲染的关键HTML),能够做到是消除无用代码(比如:注释)和最小化代码(Minify)以及动态局部渲染等...(Google对页面的HTML进行了压缩) 2、延迟JavaScript非阻塞资源加载 JavaScript和CSS都是阻塞渲染资源,对于已经鉴别出的对于首次渲染没有起到关键作用的代码,我们首先想到的是要延迟它的加载...前面已经提到,CSS是阻塞渲染资源,在CSSOM完全解析完成之前,浏览器不可能开始屏幕的绘画。...总结 优化关键渲染路径的最终目的是优先显示和用户操作相关的内容,减少低优先级资源对浏览器渲染阻塞,从而尽早显示用户真正关心的关键内容。

    1.1K30

    前端性能优化——桌面浏览器前端优化策略

    15.推荐使用异步JavaScript资源 异步的JavaScript资源不会阻塞文档解析,所以允许在浏览器中优先渲染页面,延后加载脚本执行。...16.消除阻塞渲染的CSS及JavaScript 对于页面中加载时间过长的CSS或JavaScript文件,需要进行合理拆分或延后加载,保证关键路径的资源能快速加载完成。...2.JavaScript资源引用放到HTML文件底部 JavaScript资源放到HTML文档底部可以防止JavaScript的加载和解析执行对页面渲染造成阻塞。...由于JavaScript资源默认是解析阻塞的,除非被标记为异步或者通过其他的异步方式加载,否则会阻塞HTML DOM解析和CSS渲染的过程。...6.避免运行耗时的JavaScript 长时间运行的JavaScript会阻塞浏览器构建DOM树、DOM渲染树、渲染页面。

    1.6K60
    领券