返回顶部
首页 > 资讯 > 精选 >CSS会阻塞页面渲染吗
  • 388
分享到

CSS会阻塞页面渲染吗

2023-06-08 03:06:21 388人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关CSS会阻塞页面渲染吗的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。原理解析那么为什么会出现上面的现象呢?我们从浏览器的渲染过程来解析下。 不同的浏览器使用的内核不同,所以他们的渲染过程

这篇文章给大家分享的是有关CSS会阻塞页面渲染吗的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

原理解析

那么为什么会出现上面的现象呢?我们从浏览器的渲染过程来解析下。 不同的浏览器使用的内核不同,所以他们的渲染过程也是不一样的。目前主要有两个

WEBkit渲染过程

CSS会阻塞页面渲染吗

Gecko渲染过程

CSS会阻塞页面渲染吗

从上面两个流程图我们可以看出来,浏览器渲染的流程如下:

  • html解析文件,生成DOM Tree,解析CSS文件生成CSSOM Tree

  • 将Dom Tree和CSSOM Tree结合,生成Render Tree(渲染树)

  • 根据Render Tree渲染绘制,将像素渲染到屏幕上。

从流程我们可以看出来

  • DOM解析和CSS解析是两个并行的进程,所以这也解释了为什么CSS加载不会阻塞DOM的解析。

  • 然而,由于Render Tree是依赖于DOM Tree和CSSOM Tree的,所以他必须等待到CSSOM Tree构建完成,也就是CSS资源加载完成(或者CSS资源加载失败)后,才能开始渲染。因此,CSS加载是会阻塞Dom的渲染的。

  • 由于js可能会操作之前的Dom节点和css样式,因此浏览器会维持html中css和js的顺序。因此,样式表会在后面的js执行前先加载执行完毕。所以css会阻塞后面js的执行。

DOMContentLoaded

对于浏览器来说,页面加载主要有两个事件,一个是DOMContentLoaded,另一个是onLoad。而onLoad没什么好说的,就是等待页面的所有资源都加载完成才会触发,这些资源包括css、js、图片视频等。

而DOMContentLoaded,顾名思义,就是当页面的内容解析完成后,则触发该事件。那么,正如我们上面讨论过的,css会阻塞Dom渲染和js执行,而js会阻塞Dom解析。那么我们可以做出这样的假设

  • 当页面只存在css,或者js都在css前面,那么DomContentLoaded不需要等到css加载完毕。

  • 当页面里同时存在css和js,并且js在css后面的时候,DomContentLoaded必须等到css和js都加载完毕才触发。

我们先对第一种情况做测试

<!DOCTYPE html><html lang="en"> <head> <title>css阻塞</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script> document.addEventListener('DOMContentLoaded', function() { console.log('DOMContentLoaded'); })![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d30219afd9e84bc99875991b7d284435~tplv-k3u1fbpfcp-zoom-1.image)![](Https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/87519598e6484ec38db8daed23f586c9~tplv-k3u1fbpfcp-zoom-1.image) </script> <link href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.css" rel="stylesheet"> </head> <body> </body></html>

实验结果如下图: 从动图我们可以看出来,css还未加载完,就已经触发了DOMContentLoaded事件了。因为css后面没有任何js代码。

接下来我们对第二种情况做测试,很简单,就在css后面加一行代码就行了

<!DOCTYPE html><html lang="en"> <head> <title>css阻塞</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script> document.addEventListener('DOMContentLoaded', function() { console.log('DOMContentLoaded'); }) </script> <link href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.css" rel="stylesheet"> <script> console.log('到我了没'); </script> </head> <body> </body></html>

我们可以看到,只有在css加载完成后,才会触发DOMContentLoaded事件。因此,我们可以得出结论:

  • 如果页面中同时存在css和js,并且存在js在css后面,则DOMContentLoaded事件会在css加载完后才执行。

  • 其他情况下,DOMContentLoaded都不会等待css加载,并且DOMContentLoaded事件也不会等待图片、视频等其他资源加载。

总结

由上所述,我们可以得出以下结论:

  • css加载不会阻塞DOM树的解析

  • css加载会阻塞DOM树的渲染

  • css加载会阻塞后面js语句的执行

因此,为了避免让用户看到长时间的白屏时间,我们应该尽可能的提高css加载速度,比如可以使用以下几种方法:

  • 使用CDN(因为CDN会根据你的网络状况,替你挑选最近的一个具有缓存内容的节点为你提供资源,因此可以减少加载时间)

  • 对css进行压缩(可以用很多打包工具,比如webpack,gulp等,也可以通过开启gzip压缩)

  • 合理的使用缓存(设置cache-control,expires,以及E-tag都是不错的,不过要注意一个问题,就是文件更新后,你要避免缓存而带来的影响。其中一个解决防范是在文件名字后面加一个版本号)

  • 减少http请求数,将多个css文件合并,或者是干脆直接写成内联样式(内联样式的一个缺点就是不能缓存)

感谢各位的阅读!关于“CSS会阻塞页面渲染吗”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: CSS会阻塞页面渲染吗

本文链接: https://lsjlt.com/news/251227.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • CSS会阻塞页面渲染吗
    这篇文章给大家分享的是有关CSS会阻塞页面渲染吗的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。原理解析那么为什么会出现上面的现象呢?我们从浏览器的渲染过程来解析下。 不同的浏览器使用的内核不同,所以他们的渲染过程...
    99+
    2023-06-08
  • JS会阻塞页面吗
    这篇文章主要为大家展示了“JS会阻塞页面吗”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS会阻塞页面吗”这篇文章吧。JS会阻塞页面吗?先上结论JS会阻塞DOM...
    99+
    2024-04-02
  • CSS加载会阻塞DOM吗
    这篇文章主要为大家展示了“CSS加载会阻塞DOM吗”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS加载会阻塞DOM吗”这篇文章吧。CSS加载会阻塞DOM吗?...
    99+
    2024-04-02
  • 深入了解JavaScript阻塞渲染
    目录到底几个线程主线程的任务Parse HTMLRecaculate StyleLayoutUpdate Layer TreePaintJS为啥阻塞渲染总结前言: 在中文社区,这么多...
    99+
    2024-04-02
  • css动画会被js阻塞吗
    本文将为大家详细介绍“css动画会被js阻塞吗”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“css动画会被js阻塞吗”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知识吧。c...
    99+
    2023-06-08
  • golang会阻塞吗
    Golang是一个功能强大的开源编程语言,一直以来备受开发者们的喜爱。它具有高效的垃圾回收机制、简单易用的语言特性、支持多线程和并发编程等众多优点。然而,在使用Golang进行并发编程时,我们经常会遇到一个问题:是否会出现阻塞?在本文中,我...
    99+
    2023-05-14
  • golang协程会阻塞吗
    golang协程会阻塞,避免发生的办法:1、阻塞调用,可以将阻塞的函数包装在一个单独的协程中运行,从而实现并发执行;2、同步原语,在使用这些原语时,需要仔细设计程序逻辑,避免产生死锁或者协程无法继续执行的情况;3、协程泄露,需要在适当的时候...
    99+
    2023-07-19
  • golang携程会阻塞吗
    golang携程会阻塞。但不同于传统的阻塞方式,Golang协程是通过通道来处理阻塞的。在通道操作中,当协程试图读取一个空的通道时,它会等待直到有数据可供读取为止。同样地,当协程试图向一个已满的通道中写入数据时,它会等待直到有空闲位置可供写...
    99+
    2023-07-10
  • vue页面渲染是异步的吗
    这篇文章主要介绍“vue页面渲染是异步的吗”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue页面渲染是异步的吗”文章能帮助大家解决问题。vue页面渲染是异步的。vue采用的是异步渲染,这样可以提升...
    99+
    2023-07-04
  • css加载会不会造成阻塞
    这篇文章给大家介绍css加载会不会造成阻塞,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。可能大家都知道,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?接下来,我就来对css加载对DOM...
    99+
    2023-06-08
  • CSS怎么让页面渲染速度提升数倍
    本篇内容介绍了“CSS怎么让页面渲染速度提升数倍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!浏览器在接收到服务端返回的 HTML 之后,需...
    99+
    2023-06-27
  • 如何优化Next.js页面渲染
    这篇文章主要介绍如何优化Next.js页面渲染,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!第一个问题:宣称前后台同构的Next.js为何会出现卡顿现象?Next.js 中的特有生命...
    99+
    2024-04-02
  • 使用vue渲染页面的教程
    本篇内容介绍了“使用vue渲染页面的教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue渲染页面路径图...
    99+
    2024-04-02
  • html页面渲染过程是怎样的
    这篇文章主要介绍“html页面渲染过程是怎样的”,在日常操作中,相信很多人在html页面渲染过程是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html页面渲染过程是怎...
    99+
    2024-04-02
  • web前端页面渲染机制是什么
    本篇内容介绍了“web前端页面渲染机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!浏览器在介绍浏览...
    99+
    2024-04-02
  • vue页面渲染是同步还是异步
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。vue页面渲染是异步的。Vue在更新DOM时是异步执行的,只要侦听到数据变化,Vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更,如果同一个watcher被多...
    99+
    2023-05-14
    异步渲染 渲染 Vue
  • JS利用 React.lazy 优化页面初次渲染
    目录一、需求背景二、代码分析三、技术实现1. 路由懒加载2. Prefetch 预获取一、需求背景 主站采用qiankun微前端方式嵌入新项目,qiankun会阻塞子应用资源加载,这...
    99+
    2024-04-02
  • 在浏览器加载CSS时如何防止影响页面渲染
    本篇内容介绍了“在浏览器加载CSS时如何防止影响页面渲染”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!&n...
    99+
    2024-04-02
  • 在浏览器加载CSS时怎么防止影响页面渲染
    这篇文章主要讲解了“在浏览器加载CSS时怎么防止影响页面渲染”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在浏览器加载CSS时怎么防止影响页面渲染”吧!CS...
    99+
    2024-04-02
  • CSS前端页面渲染优化属性will-change的使用方法
    这篇文章给大家分享的是有关CSS前端页面渲染优化属性will-change的使用方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言当触发scroll、resize这类的滚动事件时,被触发的频率非常高,间隔也特...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作