跳到主要内容

JS 包体拆完还是慢,问题在加载顺序

一个站 JS 从 2.1 兆拆到 600K,首屏还是 2.8 秒。拆包解决下载,解决不了执行和依赖顺序。这篇写拆错的三种情况、关键 chunk 怎么排、真正的大头在哪。

技术SEO 元析智能

2026 年 7 月一个客户说包体已经拆过了,从 2.1 兆降到 600K,首屏还是 2.8 秒。我打开 DevTools 一看,600K 里有 400K 是首屏根本用不到的东西,只是被放在了主包里。

拆包解决的是什么

它解决下载量,让首屏不用等全部 JS 下完。但首屏时间不只取决于下载,还取决于解析、执行、以及依赖的先后顺序。

一个 300K 的包,在 4 倍 CPU 降速下执行要一秒多。拆成三个 100K 的包并行下载,执行时间没变。

所以拆包只是第一步,关键是让主线程上只跑首屏需要的东西。

三种常见的拆错

第一种,把首屏依赖拆进了懒加载。按钮点击才加载的组件里,包含了首屏渲染要用的工具函数,结果首屏卡住等它。

第二种,拆得太碎。几十个小 chunk,每个都要一个请求,HTTP/2 下虽然能复用连接,但请求排队和依赖解析反而更慢。

第三种,vendor 全塞一个包。所有第三方库打成一个 1 兆的文件,首屏只用到其中一个,剩下全是白下。

加载顺序怎么排

首屏关键 chunk 用 modulepreload 提前拿,放在 head 里,让它和 HTML 并行。

非关键的用 defer,别用 async。async 的执行时机不确定,可能抢在关键脚本前面跑,造成页面空白。

runtime 和 manifest 内联到 HTML 里,省一个请求,也避免版本错配。

真正的大头往往不在业务代码

我们拆过十几个站,主包里最大的三样东西通常是:全量引入的工具库、图标库、polyfill。

工具库只用了两个函数,却把整个库打进来;图标库引了一千个图标,页面只用八个;polyfill 给现代浏览器也塞了一份。

这三样加起来能占主包的一半,砍掉比拆十次都有用。

怎么判断哪里该砍

用 bundle 分析工具看每个模块的体积占比,先砍排名前十的。

再用代码覆盖率看首屏执行了多少。我们见过首屏执行率 12% 的页面,意思是 88% 的 JS 白跑了。

最后在 4 倍 CPU 降速下测。桌面跑得欢的代码,在中端安卓机上可能是灾难。

一个可以立刻做的检查

打开 DevTools 的 Coverage 面板,录一次首屏加载,它会告诉你每个 JS 文件执行了多少、浪费了多少。

超过一半没执行的包,就是该拆或者该砍的。这个检查十分钟能做完,比看任何分析报告都直接。

一个判断

包体优化里,砍掉不用的代码比拆包收益大,排好加载顺序比压缩收益大,压缩只是最后一步。

很多团队把顺序做反了:先上压缩和 CDN,再研究拆包,最后才想起来问这些代码到底用不用。这个顺序应该倒过来。

标签:JavaScript代码分割首屏
元

元析智能

为软件公司做 SEO 和 GEO 优化

Start with a diagnosis

聊聊你的软件产品

不管你现在是 SaaS、开发者工具还是工程设计软件,只要你想让目标客户搜得到你,我们可以聊。第一次沟通不收费,会给你一份当前的 SEO 诊断,你能看出问题在哪。