移动端白屏时间长的核心原因是编译产物包含大量未用样式,优化需分三层:编译前控制入口文件@use范围(如mobile.scss仅导入必要模块)、构建时通过vite/webpack拆包、运行时用media="only x"延迟非关键css解析。

移动端白屏时间长,核心不是 Sass 写得不够“高级”,而是编译产物里塞了太多当前屏幕根本用不上的样式——比如在手机上加载了 desktop.css 里的 .sidebar、.dashboard-grid,还附带一堆媒体查询嵌套和未触发的 @extend 膨胀。Sass 本身不拆包、不懒加载,优化必须落在「编译前控制导入」+「构建时提取」+「运行时激活」三层上。
只在入口文件中 @use 真正需要的 Sass 模块
很多人以为在组件里写 @use "sass/components/button" 就算“按需”,其实只要该组件被任意一个页面入口引用,它就会进最终 CSS。真正起效的是从根入口(如 mobile.scss)开始切:
- 为移动端单独建一个入口文件,例如
mobile.scss,里面只@use明确需要的模块:按钮、表单、卡片、栅格(columns),跳过menu、modal、tooltip等桌面端重依赖模块 - 避免
@use "bulma"或@use "cirrus-core"这类全量导入;改用@use "bulma/sass/elements/button"和@use "bulma/sass/grid/columns" - 检查最终生成的 CSS 文件,搜索
.modal、.dropdown—— 如果存在,说明对应模块仍被某个@use链路拉进来了,得顺藤摸瓜删掉源头
禁用无用的 Sass 变量开关,不如直接跳过 import
Sass 框架常提供类似 $enable-modals: false 的变量来“关闭”功能,但这是误导。Bootstrap-sass 和 Cirrus 中,这类变量只影响部分条件分支,不阻止 @include modal-styles() 被调用,也不删掉已 @import 的文件。
- 安全剔除方式只有一种:在入口文件中彻底删除对应
@use或@import行,例如删掉@import "bootstrap/modal" -
$primary、$spacing这类主题变量可放心覆盖,它们不触发额外样式生成 - 不要相信开发时 SCSS 行数少——
@extend .button在编译后可能复制出几十行选择器,体积得看压缩后的 CSS 字节数
配合构建工具做 CSS 分片,而不是靠 Sass 自动分
Sass 的 @use 和 @import 全是编译期行为,不会产生多个 CSS 文件。所谓“Sass 分片”,实际是人工划分入口 + 构建工具识别并拆包:
- 在 Vite 中启用
build.cssCodeSplit: true,并为移动端单独配一个mobile.html入口,指向mobile.scss - 在 Webpack 中配置
splitChunks.cacheGroups,把/mobile\.(scss|sass)/的样式单独抽成mobile.[hash].css - 关键点:这些 chunk 必须搭配
media="only x"使用,否则浏览器照常阻塞渲染——见下一条
非关键 CSS 必须用 media="only x" 延迟解析
即使你把移动端 CSS 拆成了 mobile-critical.css 和 mobile-noncritical.css,只要后者是普通 <link rel="stylesheet">,它依然阻塞首屏渲染。
- 把非关键样式 link 的
media属性设为media="only x"(x 是任意非法媒体类型),让浏览器跳过下载与解析 - 用 JS 检测设备宽度或用户滚动后,再把
media改成"screen"或具体断点,例如:<link rel="stylesheet" href="mobile-noncritical.css" media="only x"><script> if (window.matchMedia('(max-width: 768px)').matches) { document.querySelector('[href="mobile-noncritical.css"]').media = 'screen'; } </script> - 这个机制必须和内联首屏关键 CSS 配合,否则会 FOUC;
critical工具可自动提取<style></style>片段
最容易被忽略的点是:Sass 优化止于编译输出,而加载性能瓶颈在 HTML 加载阶段。哪怕你 Sass 控制得再精准,只要 <link> 没加 media="only x",浏览器就照常卡住第一帧。优化链路必须串起来——入口切、编译控、构建拆、HTML 延迟激活。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











