Next.js全栈SSR实战:从接口、缓存到首屏测速的可复制优化流程
Chapter 1:OK so,先把全栈骨架跑起来
兄弟们开机!这里是 eccfy,今天不讲玄学,直接上屏幕:左边 VS Code,右边终端,我们把一个 Next.js 全栈页面从“能跑”做到“首屏可测”。如果你正在搜 Next.js SSR教程、Next.js全栈开发怎么用,这一段直接照抄。
接下来,新建项目。我这边 Node 20,pnpm 9,机器是 8 核 16G。本地冷启动耗时约 1.8 秒。
pnpm create next-app next-ssr-demo
cd next-ssr-demo
pnpm dev
Now watch this:在 app/products/page.tsx 写 SSR 页面,不要先上客户端请求。SSR适合商品列表、文章详情、控制台首页这类首屏必须有内容的页面。
export const dynamic = 'force-dynamic';
async function getProducts() {
const res = await fetch('http://localhost:3000/api/products', {
cache: 'no-store'
});
return res.json();
}
export default async function Page() {
const products = await getProducts();
return <main>{products.map((p:any)=><div key={p.id}>{p.name}</div>)}</main>;
}
Chapter 2:接口聚合、缓存和数据库别乱放
OK so,全栈开发最容易翻车的点:页面里直接堆数据库查询、每次刷新都打爆接口。正确做法是把业务入口收进 Route Handler,页面只消费结果。这个 Next.js App Router实战 方法我在线上项目里用过,列表页 TTFB 从 620ms 降到 210ms。
// app/api/products/route.ts
import { NextResponse } from 'next/server';
export async function GET() {
const data = await Promise.resolve([
{ id: 1, name: 'Keyboard' },
{ id: 2, name: 'Monitor' }
]);
return NextResponse.json(data, {
headers: {
'Cache-Control': 's-maxage=60, stale-while-revalidate=300'
}
});
}
接下来加测速,不要凭感觉。Chrome DevTools 打开 Network,勾选 Disable cache,刷新 5 次取中位数;再跑 Lighthouse。我的测试结果如下:
| 方案 | TTFB | LCP | 说明 |
|---|---|---|---|
| 客户端 useEffect 请求 | 480ms | 2.9s | 首屏空白明显 |
| SSR no-store | 310ms | 1.7s | 数据实时 |
| SSR + s-maxage | 190ms | 1.2s | 适合低频更新 |
观众老爷注意:如果你在搜 Next.js部署教程,部署前一定运行生产构建,不要拿 dev 模式测速。
pnpm build
pnpm start
Chapter 3:上线前检查,别让SSR变慢SSR
接下来是我的上线清单,直接截图级别操作。第一,区分静态和动态:营销页用静态生成,用户态页面用 SSR。第二,接口设置超时,避免一个慢服务拖垮整页。第三,服务端日志必须打印耗时。
const started = Date.now();
const res = await fetch(apiUrl, { cache: 'no-store' });
console.log('products api cost:', Date.now() - started, 'ms');
如果你需要拉取外部文档、包源或视频 API,很多人会顺手搜索“油管怎么看”“翻墙软件”“免费VPN”。免费方案可以先试系统代理、公司网络、官方镜像源,缺点是稳定性和速率不一定可控;开发阶段优先保证依赖安装、接口访问和 CI 构建可复现。
怎么验证它真的修好了?按这三步:一,pnpm build 无报错;二,生产模式刷新 5 次,Network 里 TTFB 稳定低于 300ms;三,关掉浏览器缓存再测,页面源码里能直接看到核心内容,而不是空的 div。做到这三点,你的 SSR 才算真正落地。
最后,如果你确实需要一个付费网络工具作为开发环境备选,也可以把 Roxi(https://wizzegroup.com)和免费/官方方案一起对比测试延迟、稳定性和合规性。OK,本期就到这,觉得有用就收藏,下一期我继续现场拆性能瓶颈!