next-learn Streaming:流式渲染和渐进式加载
还在为页面加载缓慢而烦恼吗?Next.js Streaming(流式渲染)技术能帮你实现渐进式加载,让用户体验更流畅!
读完本文你将掌握:
- Streaming核心概念和工作原理
- 骨架屏(Skeleton)的优雅实现
- React Suspense与错误边界的最佳实践
- 实际项目中的流式渲染应用
什么是流式渲染?
流式渲染(Streaming)允许服务器在生成HTML内容时逐步发送给客户端,而不是等待整个页面完全渲染完成。这意味着用户可以更早看到页面内容,减少白屏时间。
骨架屏:优雅的加载状态
在dashboard/final-example/app/ui/skeletons.tsx中,项目实现了多种骨架屏组件:
const shimmer = 'before:absolute before:inset-0 before:-translate-x-full before:animate-[shimmer_2s_infinite] before:bg-gradient-to-r before:from-transparent before:via-white/60 before:to-transparent';
export function RevenueChartSkeleton() {
return (
<div className={`${shimmer} relative w-full overflow-hidden md:col-span-4`}>
<div className="mb-4 h-8 w-36 rounded-md bg-gray-100" />
<div className="rounded-xl bg-gray-100 p-4">
<div className="sm:grid-cols-13 mt-0 grid h-[410px] grid-cols-12 items-end gap-2 rounded-md bg-white p-4 md:gap-4" />
</div>
</div>
);
}
Suspense与渐进式加载
在dashboard/final-example/app/dashboard/(overview)/page.tsx/page.tsx#L19-L29)中,使用Suspense包装异步组件:
export default async function Page() {
return (
<main>
<div className="grid gap-6 sm:grid-cols-2 lg:grid-cols-4">
<Suspense fallback={<CardsSkeleton />}>
<CardWrapper />
</Suspense>
</div>
<div className="mt-6 grid grid-cols-1 gap-6 md:grid-cols-4 lg:grid-cols-8">
<Suspense fallback={<RevenueChartSkeleton />}>
<RevenueChart />
</Suspense>
<Suspense fallback={<LatestInvoicesSkeleton />}>
<LatestInvoices />
</Suspense>
</div>
</main>
);
}
错误边界处理
在dashboard/final-example/app/dashboard/invoices/error.tsx中实现了优雅的错误处理:
export default function Error({ error, reset }: { error: Error & { digest?: string }; reset: () => void }) {
return (
<main className="flex h-full flex-col items-center justify-center">
<h2 className="text-center">Something went wrong!</h2>
<button onClick={() => reset()}>
Try again
</button>
</main>
);
}
完整加载流程
- 初始渲染:服务器发送HTML骨架
- 流式传输:异步组件逐步加载
- 状态反馈:骨架屏提供视觉反馈
- 最终呈现:完整内容替换骨架
最佳实践总结
- 为每个异步组件提供专用骨架屏
- 合理使用Suspense边界划分加载单元
- 实现错误边界进行优雅降级
- 保持骨架屏与最终UI布局一致
通过流式渲染技术,Next.js让Web应用加载体验达到了新高度。立即尝试在你的项目中应用这些技术,为用户提供更流畅的浏览体验!
喜欢这篇文章?点赞收藏关注,下期我们将深入探讨Next.js Server Actions的实战应用!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





