next-learn Streaming:流式渲染和渐进式加载

next-learn Streaming:流式渲染和渐进式加载

【免费下载链接】next-learn Learn Next.js Starter Code 【免费下载链接】next-learn 项目地址: https://gitcode.com/GitHub_Trending/ne/next-learn

还在为页面加载缓慢而烦恼吗?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>
  );
}

完整加载流程

  1. 初始渲染:服务器发送HTML骨架
  2. 流式传输:异步组件逐步加载
  3. 状态反馈:骨架屏提供视觉反馈
  4. 最终呈现:完整内容替换骨架

加载流程图

最佳实践总结

  • 为每个异步组件提供专用骨架屏
  • 合理使用Suspense边界划分加载单元
  • 实现错误边界进行优雅降级
  • 保持骨架屏与最终UI布局一致

通过流式渲染技术,Next.js让Web应用加载体验达到了新高度。立即尝试在你的项目中应用这些技术,为用户提供更流畅的浏览体验!

喜欢这篇文章?点赞收藏关注,下期我们将深入探讨Next.js Server Actions的实战应用!

【免费下载链接】next-learn Learn Next.js Starter Code 【免费下载链接】next-learn 项目地址: https://gitcode.com/GitHub_Trending/ne/next-learn

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值