避免使用CSS @import 影响页面加载速度

本文翻译自 What Is CSS @import And Why Can It Slow Down Websites?,略有删改

CSS@import可以用来加载其他CSS样式的便捷方式,但是使用它也会使网站的资源呈现变得更慢,导致网站呈现的时间更长。

什么是CSS @import?

加载CSS文件最常见的方法是使用link标签:

<link rel="stylesheet" type="text/css" href="link.css" />

另一种方法是在另一个样式表中引用一个样式表,使用CSS中的@import "url":

@import "imported.css";
/*contents of link.css */

但是这样浏览器在加载初始CSS文件后会启动另一个样式表得请求。

为什么CSS @import会让你的网站变慢?

大多数CSS文件都会阻止资源,这意味着浏览器必须先下载它们,然后才能向用户显示页面内容。

当添加多个样式表而不使用@import时(通常在HTML中使用link标签),浏览器可以并行下载它们。

相比之下,使用@import在另一个CSS文件中引用一个CSS文件意味着它们是按顺序下载的,这需要更长的时,因此网站加载速度较慢。

例如,在CSS文件中导入Google Fonts时经常会发生这种情况。

这个请求瀑布图展示了@import创建了一个顺序依赖,从而减慢网站的速度。Google字体CSS要在style.css下载后才能开始加载。

如何避免使用@import

使用标准<link>标签代替@import。如果可以编辑源CSS文件,请删除@import,并使用<link>标签在HTML文档中引用CSS文件。

而不是在CSS文件中执行此操作:

在你的HTML中按如下使用:

<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Press+Start+2P"/>

如果你不能编辑CSS文件,你可以使用预加载资源提示来帮助浏览器更快地发现(和下载)@import资源。

<link rel="stylesheet" href="parentCSS.css"/>

<link rel="preload" href="//fonts.googleapis.com/css?family=Press+Start+2P" as="font"/>

如何检查您的网站是否使用@import

  • 转到 debugbear.com/test
  • 输入您网站的URL
  • 向下滚动至建议
  • 查看建议是否包括删除@import

结论:CSS导入与链接

尽可能使用link标签而不是CSS @import,以便您的网站尽可能快地呈现。

当无法使用link标签时,请考虑使用预加载加载包含@import的样式表。

最后

在现代脚手架搭建的项目中,在开发代码中使用的@import最终编译是会合并在一起的,不会存在这种问题,如果在编译过程中没有做特殊处理的情况则需要关注一下这块的影响。看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)


CSS那些事
汇集各种CSS特效
907 声望
467 粉丝
0 条评论
推荐阅读
Web 界面开发指南,持续更新
最近看到了一份非常精简但很实用的《Web 界面开发指南》,其中仅有 4 页,却详细阐述了前端交互体验的关键要点。这份指南的思路和方法相当于一个最佳实践,比许多冗长的内容介绍更易于理解。实际上即使没有太多编...

南城FE2阅读 189

ESlint + Stylelint + VSCode自动格式化代码(2023)
安装插件 ESLint,然后 File -&gt; Preference-&gt; Settings(如果装了中文插件包应该是 文件 -&gt; 选项 -&gt; 设置),搜索 eslint,点击 Edit in setting.json

谭光志34阅读 20.8k评论 9

涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果:这个确实有点意思,但是这是 CSS 能够完成的?没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们...

chokcoco24阅读 2.3k评论 3

你可能不需要JS!CSS实现一个计时器
CSS现在可不仅仅只是改一个颜色这么简单,还可以做很多交互,比如做一个功能齐全的计时器?样式上并不复杂,主要是几个交互的地方数字时钟的变化开始、暂停操作重置操作如何仅使用 CSS 来实现这样的功能呢?一起...

XboxYan25阅读 1.7k评论 1

封面图
在前端使用 JS 进行分类汇总
最近遇到一些同学在问 JS 中进行数据统计的问题。虽然数据统计一般会在数据库中进行,但是后端遇到需要使用程序来进行统计的情况也非常多。.NET 就为了对内存数据和数据库数据进行统一地数据处理,发明了 LINQ (L...

边城17阅读 2k

封面图
【代码鉴赏】简单优雅的JavaScript代码片段(一):异步控制
Promise.race不满足需求,因为如果有一个Promise率先reject,结果Promise也会立即reject;Promise.all也不满足需求,因为它会等待所有Promise,并且要求所有Promise都成功resolve。

csRyan26阅读 3.4k评论 1

「彻底弄懂」this全面解析
当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文)。这个记录会包含函数在 哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this就是记录的其中一个属性,会在 函数执行的过程中用到...

wuwhs17阅读 2.4k

封面图
907 声望
467 粉丝
宣传栏