[css] 异步加载CSS的方式有哪些?

[css] 异步加载CSS的方式有哪些?

异步加载CSS
说到加载 CSS 这种事儿不是很简单吗?像这样咯:

这不就完事儿了嘛!

这样是没错!但是这样有问题啊——会阻塞渲染!浏览器看到这个标签就会停下手里的活儿,去加载 CSS 并解析了。

当然了,如果这个 CSS 文件是接下来要渲染的内容所需的,那无可厚非,必须先要有了这个 CSS 才能接着渲染,阻塞也是情理之中。

但实际的情况却是,我们很多 CSS 内容其实在首屏的时候是不需要,起码等到后续才会使用,那么这个时候这些 CSS 这样加载去阻塞内容渲染就不对了。

也就是说,针对优先级不那么高的(暂时用不到)CSS,就应该要想办法让它异步加载,不要阻塞浏览器渲染。

那么怎么弄呢?

老方子
现在介绍第一种老办法:通过 JS 动态插入 link 标签来异步载入 CSS 代码,就像这样:

var myCSS = document.createElement( “link” );
myCSS.rel = “stylesheet”;
myCSS.href = “mystyles.css”;
document.head.insertBefore( myCSS, document.head.childNodes[ document.head.childNodes.length - 1 ].nextSibling );
这个很好理解吧,就是后续 JS 执行的时候,去创建一个 link 标签来加载 CSS 代码。

还有一个办法呢就是利用 link 上的 media 属性,将它设置为和用户当前浏览器环境不匹配的值,比如:media=“print”,甚至可以设置为一个完全无效的值 media=“jscourse” 之类的。

这样一来,浏览器就会认为这个 CSS 文件优先级非常低,就会在不阻塞的情况下进行加载。但是为了让 CSS 规则生效,最后还是要将 media 值改对才行。所以,这个办法落实到代码就是这样:

介绍完了老方子,我们再来看看新药方。

新的异步加载方式
新方子就是利用规范中新增加的 rel=“preload” ,就像这样:

通过 preload 属性值就是告诉浏览器这个资源文件随后会用到,请提前加载好。但是这只是加载,所以你看当它加载完毕后,还是需要将 rel 值改回去,这才能让 CSS 生效。

你是不是想问:这和老方子也没多大区别嘛!

看上去确实如此,但是呢,语义上更加好一些。另外就是你仔细点就会发现 as="style"这个属性,所以 preload 不仅仅可以用在 CSS 文件上,而是可以用在绝大多数的资源文件上。比如:JS 文件

然后要用的时候,就创建一个 script 标签指向它:

var script = document.createElement(“script”);
script.src = “scriptfile.js”;
document.body.appendChild(script);
这个时候浏览器就直接从缓存中拿这个文件了,不会再发请求了,因为此前已经加载好了。

那么 preload 中的 as 属性支持哪些资源文件呢?下面这些都可以:

audio
document
embed
fetch
font
image
object
script
style
track
worker
video
是不是迫不及待想去试试了?告诉你个坏消息,目前 preload 只有 Chrome 是完美支持的,其他浏览器惨不忍睹,哎!

在这里插入图片描述

个人简介

我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,
但坚持一定很酷。欢迎大家一起讨论

主目录

与歌谣一起通关前端面试题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang 垃圾回收机制

1. Golang GC 发展 Golang 从第一个版本以来,GC 一直是大家诟病最多的。但是每一个版本的发布基本都伴随着 GC 的改进。下面列出一些比较重要的改动。 v1.1 STWv1.3 Mark STW, Sweep 并行v1.5 三色标记法v1.8 hybrid write barrier2. GC 算法简介  这一小节介绍三…

Bootstrap FileInput(文件上传)中文API整理

下载地址、API和DOM地址(英语好的小伙伴可以看看) 下载地址:https://github.com/kartik-v/bootstrap-fileinput API文档 :http://plugins.krajee.com/file-input D E M O:http://plugins.krajee.com/file-input/demo …

[css] 举例说明如何从html元素继承box-sizing?

[css] 举例说明如何从html元素继承box-sizing? html{box-sizing:border-box;}*,*:before,*:after{box-sizing:inherit;}个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起…

Configutation读取properties文件信息

commons configuration可以很方便的访问配置文件和xml文件中的的内容。Commons Configuration 是为了提供对属性文件、XML文件、JNDI资源、来自JDBC Datasource数据的访问。 官方文档:http://commons.apache.org/proper/commons-configuration/ 我们研究configurati…

JavaScript 所有数据类型

JavaScript 所有数据类型 在 JavaScript 中有 5 种不同的数据类型: stringnumberbooleanobjectfunction 3 种对象类型: ObjectDateArray 2 个不包含任何值的数据类型: nullundefined 可以使用 typeof 操作符来查看 JavaScript 变量的数据…

[css] 使用css的attr()写一个类似a标签title的提示框

[css] 使用css的attr()写一个类似a标签title的提示框 .box{position:relative;}.box:hover{content: attr(data-title); display: inline-block;padding: 10px 14px;border: 1px solid #ddd;border-radius: 5px;position: absolute;top: -50px;left: -10px;}个人简介 我是歌…

JavaScript 严格模式(use strict)

使用 "use strict" 指令 "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。 它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。 "use strict" 的目的是指定代码在严格条件下执行。…

IO 概括

# 一、概览 Java 的 I/O 大概可以分成以下几类: - 磁盘操作:File- 字节操作:InputStream 和 OutputStream- 字符操作:Reader 和 Writer- 对象操作:Serializable- 网络操作:Socket- 新的输入/输出&#xff1…

JavaScript this 关键字

面向对象语言中 this 表示当前对象的一个引用。 但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。 在方法中,this 表示该方法所属的对象。如果单独使用,this 表示全局对象。在函数中,this 表示全局对象。…

[css] 鼠标事件css的:hover和js的mouseover有什么区别?

[css] 鼠标事件css的:hover和js的mouseover有什么区别? JavaScript中鼠标事件有:onmouseover和onmouseout: 当鼠标移入和移出时触发事件onmousedown和onmouseup: 当鼠标按钮被按下或者松开时触发事件onclick和ondbclick &#xf…

【一步一步学习spring】spring入门

1. spring概述 spring是一个开源框架spring为简化企业级应用开发而生,解决的是业务逻辑层和其他各层的松耦合问题,他将面向接口的编程思想贯穿整个系统应用。spring是javaSE/EE的一站式框架。web层有spring-mvc,业务层有spring ioc、事务等机…

JavaScript 操作 HTML DOM (文档对象模型) 相关知识点

HTML DOM 树 通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。 JavaScript 能够改变页面中的所有 HTML 元素JavaScript 能够改变页面中的所有 HTML 属性JavaScript 能够改变页面中的所有 CSS 样式JavaScript 能够对页面中的所有事件做出反应…

[css] 举例说明你对指针事件(pointer-events)的理解

[css] 举例说明你对指针事件(pointer-events)的理解 pointer-events CSS 属性指定在什么情况下 (如果有) 某个特定的图形元素可以成为鼠标事件的 target。 当point-events 为none时,比如a连接不再生效个人简介 我是歌谣,欢迎和大…

JS运行三部曲

语法分析 预编译 解释执行 下面两句话能解决问题,但解决不了深入的问题,其实原理是 预编译产生的两个现象(规律)。 函数声明整体提升变量 声明提升 预编译前奏 imply global 暗示全局变量:即任何变量&#xff…

[BZOJ3791]作业

Description 众所周知,白神是具有神奇的能力的。比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成;对语文作业说一声“语”,语文作业就会出于畏惧而自己完成。今天,语文老师和数学老师布置…

[css] 如何用css实现把“我不爱996”变成“699爱不我”?

[css] 如何用css实现把“我不爱996”变成“699爱不我”? unicode-bidi 属性与 direction 属性一起使用,来设置或返回文本是否被重写,以便在同一文档中支持多种语言。 用direction属性设置rtl表示从右到左,默认是ltr从左到右的&am…

[css] scroll-snap-align属性的应用场景是什么?

[css] scroll-snap-align属性的应用场景是什么? 滚动一个列表时,控制列表中一个块始终完全在可视区内,如果滚动到一半可以回弹,保持整个块都在可视区。个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,…

STM32 软件模拟 IIC 代码,标准库、HAL库可用

1 #ifndef _IIC_H2 #define _IIC_H3 4 #include "stdio.h" 5 #include "stm32f1xx_hal.h"6 7 8 /* 定义控制 SDA SCL 的宏 标准库版9 #define I2C_SDA_UP GPIO_SetBits (GPIOC,GPIO_PIN_8) //SDA高电平 10 #define I2C_SDA_LOW GPIO_…

作用域及上下文理解

书本中的解释 [[scope]]:每个javascript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供javascript引擎存取,[[scope]]就是其中一个。[[scope]]:指的就是我们所说的作用域,其中存储了运行期上…

[css] css中Scroll-behavior属性有什么应用场景?

[css] css中Scroll-behavior属性有什么应用场景? 当用户手动点击导航或者API调用导致触发滚动操作时,scroll-behavior属性可以为滚动框设定滚动行为。auto表示立即滚动到指定位置,smooth则表示平滑过渡,需要一定的过度时间滚动到…