只换bootstrap.min.css不够,必须同步配置SRI和Brotli:使用带integrity属性的CDN链接、启用Brotli压缩(体积可压至22–25KB)、删减未用组件,并按需导入JS模块,才能真正优化首屏性能。
单纯把 bootstrap.css 换成 bootstrap.min.css 只能解决一半问题。未启用 Brotli/gzip 时,bootstrap.min.css(约 70KB)仍需完整传输;漏掉 integrity 属性,CDN 缓存无法跨站复用,反而多一次请求。
正确做法是三者同步落地:
integrity 的 CDN 链接,例如:<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-..." crossorigin="anonymous">
bootstrap.min.css 实际传输体积可压至 22–25KB<link> 放在 <head> 最顶部,早于任何自定义 CSS,避免样式重绘延迟bootstrap.min.css 体积小,但默认包含 tooltip、popover、carousel 等全部组件,而多数项目只用 row、col、btn。真正拖慢 FCP 的不是“有没有压缩”,而是“有没有把首屏真正需要的 CSS 控制在最小必要集”。
推荐两条路径:
scss/bootstrap.scss 中不需要的 @import,比如 // @import "carousel";、// @import "offcanvas";
CSS 做了精简,JS 却还引入整个 bootstrap 包,会抵消大部分优化效果。Bootstrap 5+ 已全面支持 ES 模块,但主入口仍是全量导出,构建工具无法自动 Tree-Shaking。
必须手动指定导入路径:
import 'bootstrap/js/dist/modal';,而不是 import 'bootstrap';
package.json 中声明 @popperjs/core 依赖treeShaking: true,并排除未引用的模块这是 Lighthouse 的硬性建议,也是真实弱网下的性能分水岭。一个典型的未优化 Bootstrap 页面,CSS + JS 合计常超 300KB;仅靠 .min 版本压缩后也常在 200KB 左右。
真正达标要组合动作:
crossorigin 和 integrity 都到位最容易被忽略的是:SRI(Subresource Integrity)不是可选项,它是缓存复用的前提;而 Brotli 不是“开了更好”,是“没开就白压了”。