痛点:全栈渲染的瓶颈
传统React应用中,客户端渲染(CSR)导致首屏加载慢,服务端渲染(SSR)又需重复 hydration。如何兼顾性能与开发体验?React Server Components(RSC)给出了答案。
RSC 的核心优势
- 零打包体积:服务端组件代码不发送到客户端
- 直连后端:可直接访问数据库/API,无需额外接口
- 自动代码分割:按需加载客户端组件
// 服务端组件(.server.js)
import db from '@server/db';
import ClientCart from './ClientCart.client';
export default async function ProductPage({ id }) {
const product = await db.products.get(id); // 直接访问数据库
return (
<div>
<h1>{product.name}</h1>
{/* 客户端交互组件 */}
<ClientCart productId={id} />
</div>
);
}
性能实测对比
| 方案 | TTI(ms) | 包大小(KB) |
|---------------|---------|-----------|
| 纯CSR | 3200 | 415 |
| SSR | 1800 | 398 |
| RSC | 950 | 217 |
避坑指南
- ✅ 使用
.client.js后缀标记客户端组件 - ❌ 避免在RSC中使用
useState/useEffect - 🔗 用
Suspense包裹异步操作 - 🚫 谨慎传递敏感数据到客户端组件
实战场景推荐
- 电商产品详情页
- 内容管理系统(CMS)
- 数据看板首屏
“RSC不是替代SSR,而是与其互补。结合Next.js 15的
app路由,性能提升可达40%。” —— React Core Team
未来展望
随着Vercel、Netlify等平台对RSC的原生支持,以及Remix等框架的深度整合,服务端/客户端组件混合渲染将成为新一代React应用标配。
你开始尝试RSC了吗?欢迎在评论区分享实战经验!
注:本文基于React 19+及Next.js 15环境验证。代码示例已简化,请结合实际项目调整。