Blog
Next.jsPerformanceEngineering
一行指令,223 KB
一个没有状态、没有副作用、没有事件处理的营销页,却把自己当作 JavaScript 发给了浏览器。修法是删掉一行。

先看数字
PageSpeed 给移动端性能打了 71 分。那是分数不是诊断,于是我们跑了一次生产构建,读了路由表。首页的 First Load JS 是 315 kB,站点其余部分都在 90 上下。
里面装了什么
页面文件以 "use client" 开头。这一行把整棵 React 树变成客户端组件,它 import 的一切都会跟着走:六百行布局、页面上的每一句文案、每一张插图。
我们查了它到底需要浏览器做什么。没有 useState,没有 useEffect,没有一个事件处理函数。它是客户端组件,只是为了调用两个国际化 hook——而这两个 hook 都有服务端版本,只是名字不同。
替换
十四个组件从客户端 hook 换到服务端 hook,并改成 async。那行指令删掉了。打字效果的标题和 FAQ 行本来就是独立的客户端组件,原样保留。
315 kB -> 91.8 kB
值得记住的部分
没有人是随手写下 "use client" 的。它在页面确实需要某个 hook 的早期被加上,然后在那个理由被重构掉之后留了下来。偶尔翻一下路由表,问问哪些页面比看起来更重,是值得的。
ToolGo Team
产品与工程
我们构建实用的SaaS工具,并分享我们的学习——从产品决策到技术深度剖析。

