全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-16 5 分钟 ✍️ juanwangdev

避免 @import

@import 在 CSS 中引入其他样式表,但存在性能问题。

问题分析

串行加载

CSS
/* style.css */
@import url('reset.css');
@import url('base.css');
@import url('components.css');

浏览器加载流程:

  1. 加载 style.css
  2. 解析发现 @import
  3. 串行加载 reset.css
  4. 解析发现下一个 @import
  5. 串行加载 base.css ...

结果:多个请求串行执行,总时间累加。

阻塞渲染

HTML
<link rel="stylesheet" href="style.css">

style.css 中的 @import 样式会阻塞渲染,直到所有导入文件加载完成。

正确做法

使用 link 标签

HTML
<!-- 好:并行加载 -->
<link rel="stylesheet" href="reset.css">
<link rel="stylesheet" href="base.css">
<link rel="stylesheet" href="components.css">

多个 link 标签并行加载,总时间取最慢的一个。

预加载优化

HTML
<!-- 预加载关键 CSS -->
<link rel="preload" href="critical.css" as="style">
<link rel="stylesheet" href="critical.css">

对比总结

方式加载方式渲染影响推荐程度
@import串行阻塞渲染★☆☆☆☆
<link>并行阻塞渲染★★★★☆
<link preload>并行+预加载更快★★★★★

何时可以使用 @import

仅在 CSS 预处理或构建工具中使用:

scss
// Sass/SCSS 中使用 @import(编译时合并)
@import 'variables';
@import 'mixins';
@import 'components';

构建工具会将多个文件打包成一个,不存在运行时串行问题。

要点总结

  • @import 导致串行加载,阻塞渲染
  • 使用多个 link 标签实现并行加载
  • 预加载关键 CSS 进一步提升性能
  • 预处理中的 @import 在构建时合并,可正常使用
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 图片优化与 CSS Sprites
下一篇 → 回流/重排与重绘底层机制
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码