HTML中的资源提示关键词

渲染阻塞问题

之前在学习浏览器的渲染原理的时候我们就知道:因为浏览器一次只能开启一个渲染主线程,所以当浏览器解析到script标签时会停止DOM树的构建,转而去执行script,如果script中引用的是外部脚本,则浏览器会先从网络上下载script,下载完毕后执行script,当script执行完毕之后继续构建DOM树

DOM树作为外部脚本访问DOM节点的接口,当我们调用诸如 document.getElementById 的方法时,返回的元素是一个 DOM 节点。每个 DOM 节点都有许多可以用来访问和更改它的函数,用户看到的内容也会相应地发生变化

因为script中的代码能动态的修改DOM树中的节点,所以在浏览器解析到script标签时必须先停止DOM树的构建,在执行完script之后继续开始构建DOM树,这也是为什么我们写html时script标签总是放在body标签最后
浏览器不仅会在解析HTML的时候构建DOM树,还会在解析CSS的时候构建CSSOM树,那么在构建CSSOM树的时候会发生渲染阻塞吗

事实上,因为CSSOM并不会更改DOM,所以构建CSSOM本身并不能阻塞渲染,但在JavaScript中我们能动态的访问与修改元素的CSS,而在运行script时如果CSSOM尚未构建完成则浏览器会转而构建CSSOM,等CSSOM构建完成后再运行script

无样式内容闪现

无样式内容闪现,简称为FOUC,在浏览器构建完整个DOM,CSSOM尚未构建完时,页面会短暂的展示一个没有CSS的页面,但当CSSOM构建完成后页面就会变成有CSS样式的样子,这种突然的视觉变化被称为无内容闪现

无内容闪现会给用户带来极其不好的体验,为了尽量避免这种情况的发生,我们通常会将CSS放在HTML顶部,这样当浏览器解析HTML文档时会首先解析CSSOM,然后再解析DOM

然而由script标签所带来的阻塞渲染问题依旧没有解决,随着浏览器的日渐成熟,浏览器也为我们提供了属性或值,这些属性或值被称为资源提示关键词,通过使用这些关键词我们就能很好的处理阻塞渲染的问题

defer与async

defer和async都是script标签的一个布尔属性,他们都能实现避免渲染阻塞问题的发生,但具体又有些细微的不同

defer

<script type="text/javascript" defer src="./index.js"></script>

在script标签中的defer属性,如果为true的话浏览器会推迟这段script的执行,浏览器会在文档被解析后,但在触发 DOMContentLoaded 事件之前执行

需要注意的是,defer的是否生效与该script元素的src属性是否设置密切相关

async

<script type="text/javascript" async src="./index.js"></script>

async属性同样是个布尔属性,如果是普通脚本,那么普通脚本会被并行请求,并尽快解析和执行。如果是模块脚本,它们也会被并行请求,并尽快解析和执行,也就是说,在下载JavaScript脚本的过程中并不会导致渲染阻塞,但执行JavaScript代码时依旧会阻塞DOM树的构建

总结:

  1. 如果该script元素的src属性为空,则defer和async属性不生效
  2. 如果该script元素的type属性为空或者为一个JavaScript MIME类型时,该script为普通脚本,普通脚本会受到defer和async的影响,但这些的前提为src属性不为空
  3. 如果该script元素的type属性为module时,该script为JavaScript模块脚本,该类型脚本不受defer的影响,但会受到async的影响,与src属性无关
  4. 如果该script元素的type属性为其他值时则defer和async属性不生效
  5. 即使已经指定了async属性,也可以同时指定defer属性,从而可以使不支持async属性的浏览器通过defer来避免渲染阻塞的发生

渲染阻塞

preload

<link rel="preload" href="./index.css" as="style">
<link rel="preload" href="./index.js" as="script">

preload是link元素的rel属性值,该属性可以通过显示声明一个资源来告诉浏览器这个资源需要首先加载,而不是用的时候再加载,从而使在之后用到这个资源的时候无需等待加载,可以直接使用,preload通过as属性来指定预加载资源的类型
使用preload有如下优点:

  1. 使用preload我们可以将重要的资源提前加载,从而提高页面的流畅性
  2. 通过as属性,浏览器可以决定哪些资源能够复用
  3. 通过as属性,浏览器可以判断请求是否符合内容安全策略(CSP,如XSS,数据注入攻击等)

prefetch与prerender

这两个关键词都是link元素rel的属性值,与preload类似,但这两个关键词会在空余时间执行

prefetch

<link rel="prefetch" href="./message.css" as="style">

prefetch会在页面的空余时间来加载指定的资源,通过prefetch获取的资源通常会被放入缓存至少5分钟,当页面跳转时已发送的prefetch也不会中断
prefetch通常用于请求除首页外的其他页面资源,通过prefetch我们可以提高首屏后其他页面的渲染速度

prerender

<link rel="prerender" href="https://www.baidu.com" as="style">

prerender和prefetch类似,但prerender会在页面空余时间直接加载整个页面,而不是某个资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/717970.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

你还不会选ProfiNET和EtherCAT网线?

在现代工业自动化领域&#xff0c;ProfiNET和EtherCAT是两种非常流行的通信协议。选择合适的网线对于确保通信的稳定性和效率至关重要。 ProfiNET是什么&#xff1f; ProfiNET是一种基于以太网的通信协议&#xff0c;由德国西门子公司开发。它支持实时通信&#xff0c;广泛应用…

玩转Matlab-Simscape(初级)- 10 - 基于COMSOLSimulink 凸轮机构的控制仿真

** 玩转Matlab-Simscape&#xff08;初级&#xff09;- 10 - 基于COMSOL&Simulink 凸轮机构的控制仿真 ** 目录 玩转Matlab-Simscape&#xff08;初级&#xff09;- 10 - 基于COMSOL&Simulink 凸轮机构的控制仿真 前言一、简介二、在Solidworks中创建3D模型&#xff…

05-5.4.1 树的存储结构

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

商家转账到零钱怎么申请

开通商家转账到零钱功能涉及到多个步骤&#xff0c;包括资格审核、材料准备、提交申请等。以下是详细的步骤&#xff1a; 1. 确认开通条件&#xff1a; - 商家需要先成为微信支付商户。 - 商家的微信支付账户没有历史违规记录。 - 商家主体为企业资质。 - 商家系统已经上线并可…

Linux驱动面试题

1.导出符号表的原理&#xff1f; 2.字符设备驱动的框架流程 open read wirte close 是系统调用&#xff08;从用户空间进入内核空间的唯一的方法&#xff09;会产生swi软中断《也会存在软中断号》&#xff08;从User模式切换到SVC&#xff08;管理模式&#xff09;下因为在…

天锐绿盾加密软件,它的适用范围是什么?

天锐绿盾数据防泄密软件的适用范围广泛&#xff0c;主要可以归纳为以下几点&#xff1a; 行业适用性&#xff1a; 适用于各个行业&#xff0c;包括但不限于制造业、设计行业、软件开发、金融服务等&#xff0c;特别是对数据安全性要求较高的行业。企业规模与类型&#xff1a; 适…

C# Winform图形绘制

WinForms 应用程序中的控件是基于窗体的&#xff0c;当控件需要重绘时&#xff0c;它会向父窗体发送一个消息请求重绘。但是&#xff0c;控件本身并不直接处理绘制命令&#xff0c;所以你不能直接在控件上绘制图形。 解决方法&#xff1a; 重写控件的OnPaint方法使用CreateGr…

网站改成HTTPS方法

网站改成HTTPS只要网站没有特殊性的要求&#xff0c;绝大部分网站很轻松的就可以完成&#xff0c;尤其是CMS类似的网站系统或者自助搭建的网站&#xff08;比如&#xff1a;这种网站可以在网站后台一次性安装并且生效&#xff09;。 基本要求 将网站改成HTTPS有2个前提&#…

MMpose安装实例

摘要&#xff1a; 这个大数据训练发展较快&#xff0c;各种版本问题&#xff0c;不太好匹配&#xff0c;仅是安装就会大费周章。本文图文并茂的描述了一种成功的安装方式。仅供参考。 使用的win版本是win11&#xff0c;英伟达显卡是GeForce GTX 1660 SUPER。 1.cuda版本选择 通…

FFmpeg中内存分配和释放相关的源码:av_malloc函数、av_mallocz函数、av_free函数和av_freep函数分析

一、av_malloc函数分析 &#xff08;一&#xff09;av_malloc函数的声明 av_malloc函数的声明放在在FFmpeg源码&#xff08;本文演示用的FFmpeg源码版本为5.0.3&#xff0c;该ffmpeg在CentOS 7.5上通过10.2.1版本的gcc编译&#xff09;的头文件libavutil/mem.h中&#xff1a;…

cve_2014_3120-Elasticsearch-rce-vulfocus靶场

1.背景 来源&#xff1a;ElasticSearch&#xff08;CVE-2014-3120&#xff09;命令执行漏洞复现_mvel 漏洞-CSDN博客 参考&#xff1a;https://www.cnblogs.com/huangxiaosan/p/14398307.html 老版本ElasticSearch支持传入动态脚本&#xff08;MVEL&#xff09;来执行一些复…

万字长文详述 - 带你了解Jvm虚拟机运行时数据区

JVM虚拟机&#xff0c;对大部分Java程序员而言&#xff0c;是既熟悉又陌生的存在&#xff0c;Java程序在虚拟机的自动内存管理机制帮助下&#xff0c;减少了绝大部分的内存管理工作。但也正是因为如此&#xff0c;虚拟机如果出现了内存溢出或者泄露的情况&#xff0c;问题排查、…

基于YOLOv8m的船舶检测(附数据集和Coovally操作步骤)

本文主要内容:详细介绍了船舶检测整个过程&#xff0c;从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式&#xff0c;请先看检测效果 现状 船舶检测和识别是一项重要的任务&#xff0c;它涉及到航运安全、港口管理、海洋保护等方面&#xff0c…

YOLOv10涨点改进轻量化双卷积DualConv,完成涨点且计算量和参数量显著下降

本文独家改进:双卷积由组卷积和异构卷积组成,执行3x3 和 1x1 卷积运算Q代替其他卷积核仅执行 1x1 卷积。 DualIConv 显着降低了深度神经网络的计算成本和参数数量,同时在某些情况下令人惊讶地实现了比原始模型略高的精度。 我们使用 DualConv 将轻量级 MobileNetV2 的参数数量…

JavaEE、SSM基础框架、JavaWeb、MVC(认识)

目录 一、引言 &#xff08;0&#xff09;简要介绍 &#xff08;1&#xff09;主要涉及的学习内容 &#xff08;2&#xff09;学习的必要性 &#xff08;3&#xff09;适用学习的人群&#xff08;最好有这个部分的知识基础&#xff09; &#xff08;4&#xff09;这个基础…

代码随想录——电话号码的字母组合(Leetcode17)

题目链接 回溯 class Solution {List<String> res new ArrayList<String>();StringBuilder str new StringBuilder();HashMap<String, String> Sites new HashMap<String, String>();public List<String> letterCombinations(String digit…

经验分享,xps格式转成pdf格式

XPS 是一种电子文档格式、后台打印文件格式和页面描述语言。有时候微软默认打印机保存的是xps格式&#xff0c;我们如何转换为pdf格式呢&#xff0c;这里分享一个免费好用的网站&#xff0c;可以实现。 网站&#xff1a;https://xpstopdf.com/zh/ 截图&#xff1a;

CAS Apereo 5.3.16 实现单点登录

1.CAS部署 服务端下载地址:cas5.3 1.下载好打开后,复制target/cas/WEB-INF/classes/META-INF/spring.factories target/cas/WEB-INF/classes/services下的Apereo-10000002.json和HTTPSandIMAPS-10000001.json target/cas/WEB-INF/classes下的application.properties和log4j…

访问jlesage/firefox镜像创建的容器中文乱码问题

目录 介绍总结 介绍 最近在使用jlesage/firefox镜像创建容器的时候&#xff0c;发现远程管理家里网络的时候中文会出现乱码&#xff0c;导致整个体验非常的不好&#xff0c;网上查找资料说只要设置环境变量ENABLE_CJK_FONT1 就可以解决问题&#xff0c;抱着试一试的态度还真的成…

苏州辰安塑业携塑料托盘、塑料物流箱解决方案亮相2024杭州快递物流展

苏州辰安塑业携塑料托盘、吹塑托盘、塑料卡板箱、塑料周转箱、塑料物流箱、塑料垃圾桶解决方案盛装亮相2024杭州快递物流展&#xff01; 展位号&#xff1a;3C馆A51 苏州辰安塑业有限公司&#xff0c;是一家专业从事塑料托盘、吹塑托盘、塑料卡板箱、塑料周转箱、塑料物流箱、…