React Server Components 与全栈数据流实践:路由、缓存与流式渲染技术背景React Server Components(RSC)将组件渲染与数据获取放在服务端,减少客户端 JS 体积与 Hydration 成本。结合流式渲染与缓存,可显著提升首屏与交互性能。核心内容路由与组件边界(示例:App 路由)// app/page.tsx(Server Component)
export default async function Page() {
const data = await getPosts();
return (
<div>
<h1>RSC 帖子</h1>
<ul>{data.map(p => <li key={p.id}>{p.title}</li>)}</ul>
<ClientWidget />
</div>
);
}
// app/components/ClientWidget.tsx(Client Component)
'use client'
export default function ClientWidget() {
return <button>交互按钮</button>;
}
数据获取与缓存// app/lib/data.ts
import 'server-only'
export async function getPosts() {
const res = await fetch('https://api.example.com/posts', { cache: 'force-cache' });
return res.json();
}
export async function getUser(id: string) {
const res = await fetch(`https://api.example.com/users/${id}`, { next: { revalidate: 300 } });
return res.json();
}
流式渲染与 Suspense// app/page.tsx
import { Suspense } from 'react'
const Posts = async () => {
const data = await getPosts();
return <ul>{data.map(p => <li key={p.id}>{p.title}</li>)}</ul>
}
export default function Page() {
return (
<div>
<h1>RSC 流式渲染</h1>
<Suspense fallback={<div>加载中...</div>}>
{/* 服务器流式下发 */}
{/* @ts-expect-error Async Server Component */}
<Posts />
</Suspense>
</div>
)
}
技术验证参数在 Next.js(RSC + Edge Runtime,Chrome 128/Edge 130)下:首包 TTFB:下降 20–45%客户端 JS 体积:下降 30–60%Hydration 阶段阻塞:P95 < 40ms应用场景高内容密度页面与数据驱动视图边缘就近渲染与缓存协同复杂页面的交互分层与降本最佳实践将数据获取放在 Server Component,交互放在 Client Component使用 `cache`/`revalidate` 控制缓存与更新结合 Suspense 流式渲染与渐进就绪

发表评论 取消回复