跳到主要内容

懒加载与预热:把首次点击的 1–2 秒藏起来

· 2 分钟阅读
Connexion Collective
ADMIN 权限狗

「加了工具,首页会不会变慢?」这是我自己最担心的问题。解决办法不是压缩代码,而是分清两件事:没进页面不该花钱,进了页面第一次别等。

第一层:路由级拆分​

Docusaurus 会给每个页面单独打包。工具页的组件只有 10 KB,首页和文章页根本不会下载它。禁用缓存实测:

页面JSWASM
首页570 KB(含框架与搜索)0
/tools/image-compress570 KB + 10 KB0
点击「开始压缩」后+22 KB+246 KB

首页的 570 KB 是框架、React、搜索客户端,和工具无关。

第二层:库级懒加载​

压缩逻辑和 jSquash 都放在 await import() 里,只有点按钮才拉。WASM 更晚,真正开始编码才请求,而且按格式只拉需要的那一个。

第三层:预热​

懒加载解决了「不点不花钱」,但第一次点要等 250 KB 下载,手机上大约 1–2 秒。我的做法是:用户选完图就预热。

  • 根据当前输出格式,提前初始化对应编码器;
  • 切换格式时防抖 500 ms 再预热,避免来回切反复下载;
  • 预热失败静默忽略,正式压缩时还会重试并提示。

实测:选图后 34 ms 开始下载编码器;点「开始压缩」到出结果只要 172 ms。

取舍​

预热会多下载一次 WASM,但只发生在「用户已经选了图」这个强意图之后,不是无条件预取。对流量敏感的场景,也可以退化成纯懒加载,只是第一次点击会慢一点。

经验​

懒加载和预热不是对立选项。前者管「入口成本」,后者管「首次交互成本」,边界划清楚,两个目标可以同时达到。

加载评论中...