当前位置: 首页 > news >正文

js和css阻塞问题

面试常见问题

  • css 加载会不会阻塞 js 的加载?(不会)
  • css 加载会不会阻塞 js 的执行?(会)
  • css 加载会不会阻塞 DOM 的解析?(不会)
  • css 加载会不会阻塞 DOM 的渲染?(会)
  • js 加载会不会阻塞 DOM 的解析?(会)
  • js 加载会不会阻塞 DOM 的渲染?(会)
  • js 执行会不会阻塞 DOM 的解析?(会)
  • js 执行会不会阻塞 DOM 的渲染?(会)

浏览器工作原理

  • JS 引擎线程(单线程):负责解析 Javascript 脚本,运行代码
  • GUI 渲染线程:负责渲染浏览器界面,解析 HTML,CSS,构建 DOM Tree,Style Tree 和 Render Tree,布局和绘制等

注意:GUI 渲染线程与 JS 引擎线程是互斥的,当 JS 引擎执行时 GUI 线程会被挂起,所以当 JS 加载和执行时,会阻塞住 DOM 的解析和渲染,导致白屏时间很长

浏览器渲染过程

1.解析 HTML 生成 DOM Tree
2.解析 CSS 生成 Style Tree
3.将 DOM Tree 与 Style Tree 合并在一起生成 Render Tree
4.遍历 Render Tree 开始布局,计算每个节点的位置大小信息(Layout)
5.绘制 Render Tree,绘制页面的像素信息(Painting),显示到屏幕上(Display)

DOM Tree 和 Style Tree 是并行构建的,所以 CSS 加载不会阻塞 DOM 的解析
由于 Render Tree 是依赖于 DOM Tree 和 Style Tree 的,因此,css 加载会阻塞 Dom 的渲染
GUI 渲染线程与 JS 引擎线程是互斥的,加载解析 css 时,JS 引擎会被挂起,所以 css 会阻塞 js 的执行

资源优先级

1.html 、 css 、 font 这三种类型的资源优先级最高
2.然后 script 、 xhr 请求
3.接着是图片、语音、视频

相关文章:

js和css阻塞问题

面试常见问题 css 加载会不会阻塞 js 的加载?(不会)css 加载会不会阻塞 js 的执行?(会)css 加载会不会阻塞 DOM 的解析?(不会)css 加载会不会阻塞 DOM 的渲染&#xff1…...

MySQL 的基础操作

数据库的基础操作 1. 库操作2. 表的操作3. 数据类型 数据库是现代应用程序中至关重要的组成部分,通过数据库管理系统(DBMS)存储和管理数据。 1. 库操作 创建数据库 创建数据库是开始使用数据库的第一步。下面是一些常见的创建数据库的示例&a…...

【python进阶篇】面向对象编程(1)

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定…...

力扣面试经典150 —— 6-10题

力扣面试经典150题在 VScode 中安装 LeetCode 插件即可使用 VScode 刷题,安装 Debug LeetCode 插件可以免费 debug本文使用 python 语言解题,文中 “数组” 通常指 python 列表;文中 “指针” 通常指 python 列表索引 文章目录 6. [中等] 轮转…...

[密码学]入门篇——加密方式

一、概述 加密方法主要分为两大类: 单钥加密(private key cryptography):加密和解密过程都用同一套密码双钥加密(public key cryptography):加密和解密过程用的是两套密码 历史上&#xff0c…...

构建前后端分离项目常用的代码

构建前后端分离项目常用的代码 1.代码生成器 import com.baomidou.mybatisplus.generator.FastAutoGenerator;import com.baomidou.mybatisplus.generator.config.OutputFile;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;​import java.util.…...

2575. 找出字符串的可整除数组(Go语言)

https://leetcode.cn/problems/find-the-divisibility-array-of-a-string/ 在看题解之前,我的代码是以下这样: package mainimport ("fmt" )func main() {fmt.Println(divisibilityArray("998244353", 3)) }func divisibilityArray…...

Redis与 Memcache区别

Redis与 Memcache区别 1 , Redis 和 Memcache 都是将数据存放在内存中,都是内存数据库。不过 Memcache 还可用于缓存 其他东西,例如图片、视频等等。 2 , Memcache 仅支持key-value结构的数据类型,Redis不仅仅支持简单的key-value类型的数据&…...

#QT(智能家居界面-界面切换)

1.IDE:QTCreator 2.实验 3.记录 (1)创建一个新界面(UI界面) (2)可以看到新加入一个ui文件,双击打开,设置窗口大小与登录界面一致 (3)加入几个PUS…...

js拓展-内置对象

目录 1. 数组对象 1.1 数组的四种方式 1.2 JS中数组的特点 1.3 常用方法 2. 日期对象 2.1 日期对象的创建 2.2 日期对象的方法 2.3 案例:输出现在的时间 3. 全局对象 3.1 字符串转换成数字类型 3.2 编码解码函数 1. 数组对象 注:数组在JS中是一…...

【李沐精读系列】GPT、GPT-2和GPT-3论文精读

论文: GPT:Improving Language Understanding by Generative Pre-Training GTP-2:Language Models are Unsupervised Multitask Learners GPT-3:Language Models are Few-Shot Learners 参考:GPT、GPT-2、GPT-3论文精读…...

Libevent的使用及reactor模型

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读…...

查看Linux服务器配置

# chkconfig --list # 列出所有系统服务 # chkconfig --list | grep on # 列出所有启动的系统服务 # ifconfig # 查看所有网络接口的属性 # iptables -L # 查看防火墙设置 # route -n # 查看路由表 # netstat -lntp # 查看所有监听端口 # netstat -antp # 查看所有已经建立的连…...

【机器学习】包裹式特征选择之递归特征添加法

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…...

解决cs不能生成Linux木马的问题

要解决的问题:众所周知,msf上面的shell或者是其他的shell想反弹给cs默认情况下是只支持windows的,因为cs的监听模块默认没有linux的,但是有些主机就是用linux搭建的,这可怎么办呢。就要用到一个插件CrossC2。 下载插件…...

vue3组件通信方式

不管是vue2还是vue3,组件通信方式很重要,不管是项目还是面试都是经常用到的知识点。 vue2组件通信方式 props:可以实现父子组件、子父组件、甚至兄弟组件通信 自定义事件:可以实现子父组件通信 全局事件总线$bus:可以实现任意组件通信 pubsub:发布订阅模式实现任意组件通信…...

前端实现生成图片并批量下载,下载成果物是zip包

简介 项目上有个需求,需要根据表单填写一些信息,来生成定制的二维码图片,并且支持批量下载二维码图片。 之前的实现方式是直接后端生成二维码图片,点击下载时后端直接返回一个zip包即可。但是项目经理说后端实现方式每次改个东西…...

android 快速实现 圆角矩形控件 及 圆形控件

1.自定义RoundImageView package com.examle.widget;import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import an…...

【Python】外网远程登录访问jupyter notebook+pycharm使用ipython

第一步:创建python虚拟环境 conda create -n py3610 python3.6.10第二步:安装ipython pip install ipython pip install ipython notebook第三步:创建 IPython Notebook 服务器配置文件 # 进入python交互shell,设置密码 >&…...

error:0308010C:digital envelope routines::unsupported

error:0308010C:digital envelope routines::unsupported 报错原因解决方案方案一:降低node版本在17以下指定node版本 mac node版本降级 mac切换node版本 方案二:启用legacy OpenSSL provider方案三:配置package.json文件拓展:pac…...

【官方未公开的Agent-Ready设计白皮书】:基于Spring Boot 4.0 M3源码逆向工程,还原Agent生命周期管理协议与SPI扩展契约

第一章:Agent-Ready架构演进与Spring Boot 4.0 M3战略定位随着AI原生应用爆发式增长,传统微服务架构正经历向“Agent-Ready”范式的深度演进——系统需天然支持智能体(Agent)的动态注册、上下文感知、工具编排与自主决策。Spring …...

别再傻傻分不清!工程师实战选型:线性稳压器 vs LDO,从压降到PSRR的保姆级避坑指南

工程师实战选型:线性稳压器与LDO的深度解析与避坑指南 在硬件设计领域,电源管理一直是工程师们绕不开的核心课题。特别是对于嵌入式系统、便携式设备和精密模拟电路而言,如何选择合适的稳压方案往往直接决定了产品的性能上限和市场竞争力。然…...

告别手动整理:WeChat Toolbox 让微信管理变得智能高效

告别手动整理:WeChat Toolbox 让微信管理变得智能高效 【免费下载链接】wechat-toolbox WeChat toolbox(微信工具箱) 项目地址: https://gitcode.com/gh_mirrors/we/wechat-toolbox 你是否曾经为了整理微信联系人而花费数小时&#xf…...

从零搭建 LNMP+WordPress:从环境部署到网站上线全流程教程

在搭建个人博客、企业官网时,LNMP(LinuxNginxMySQLPHP) 是业内最稳定、高效、轻量化的经典组合。不管是阿里云 ECS 云服务器,还是本地 CentOS 虚拟机,跟着这篇教程走,新手也能从 0 到 1 完成网站搭建&#…...

Blazor 2026配置避坑大全,12个高频崩溃场景+对应csproj/.cshtml/.razor配置修复代码块

第一章:Blazor 2026配置避坑大全导论Blazor 2026 引入了多项底层运行时增强与项目模板重构,但其默认配置在跨平台构建、AOT 预编译、HTTP/3 支持及 WASM 主机生命周期管理等场景中存在隐性兼容陷阱。开发者若沿用 Blazor 2024 或更早版本的经验直接升级&…...

联想Legion Tab Y700二代ZUI 15.0.677固件深度体验:新特性、Root可行性分析与第三方模块适配指南

联想Legion Tab Y700二代ZUI 15.0.677固件深度体验:新特性、Root可行性分析与第三方模块适配指南 当一款平板电脑被冠以"Legion"之名,它注定不会满足于平庸的系统体验。联想Legion Tab Y700二代搭载的ZUI 15.0.677固件(TB320FC_CN_…...

别再折腾注册机了!用Docker快速搭建一个带Web界面的SSH/SFTP客户端环境

容器化SSH/SFTP解决方案:告别传统客户端的5个理由 每次打开SecureCRT或SecureFX时,你是否会下意识检查注册信息是否过期?当系统更新导致破解失效时,那种熟悉的焦虑感又涌上心头。其实在容器化技术成熟的今天,我们完全可…...

5分钟搞定OBS转RTSP直播:obs-rtspserver插件实战指南

5分钟搞定OBS转RTSP直播:obs-rtspserver插件实战指南 【免费下载链接】obs-rtspserver RTSP server plugin for obs-studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-rtspserver 你是否曾为OBS直播内容无法被监控系统、智能电视等设备直接访问而烦恼…...

告别命令行!用Kafka Tool 2.0.4图形化界面管理Topic和消息的保姆级教程

告别命令行!用Kafka Tool 2.0.4图形化界面管理Topic和消息的保姆级教程 你是否曾在深夜对着黑底白字的Kafka命令行界面抓狂?或是面对kafka-topics.sh和kafka-console-consumer.sh的复杂参数感到迷茫?今天,我们将彻底解放你的双手…...

别再傻傻分不清!用STM32F103C8T6实战区分有源/无源蜂鸣器(附完整代码)

STM32F103C8T6实战:有源与无源蜂鸣器的本质差异与驱动全解析 蜂鸣器作为嵌入式系统中最基础的声音反馈元件,却常常让初学者陷入选择困境。当你在电商平台搜索"STM32蜂鸣器模块"时,会发现从几毛钱到十几元的产品都标注着"蜂鸣器…...