北鸟南游的博客 北鸟南游的博客
首页
  • 前端文章

    • JavaScript
    • Nextjs
  • 界面

    • html
    • css
  • 计算机基础
  • 后端语言
  • linux
  • mysql
  • 工具类
  • 面试相关
  • 图形学入门
  • 入门算法
  • 极客专栏
  • 慕课专栏
  • 电影资源
  • 儿童动漫
  • 英文
关于我
归档
GitHub (opens new window)
首页
  • 前端文章

    • JavaScript
    • Nextjs
  • 界面

    • html
    • css
  • 计算机基础
  • 后端语言
  • linux
  • mysql
  • 工具类
  • 面试相关
  • 图形学入门
  • 入门算法
  • 极客专栏
  • 慕课专栏
  • 电影资源
  • 儿童动漫
  • 英文
关于我
归档
GitHub (opens new window)
  • JavaScript

    • 原生js
    • vue
    • react
    • node
    • nextjs
      • 01-nextjs起步-[翻译官网案例]
      • 02-样式设置【翻译官网案例】
      • 03-优化字体和图像
      • 04-创建layouts布局和pages页面
      • 05-在页面之间导航
      • 06-设置数据库
      • 07-fetch获取数据
      • 08-静态和动态渲染
      • 09-Streaming数据模式
      • 10-部分预渲染
        • 本章目标:
        • 静态与动态路由
        • 什么是部分预渲染
        • 部分预渲染是如何工作的
        • 实现部分预渲染
        • 总结:
      • 11-添加搜索和分页
      • 12-提交数据
      • 13-处理错误
      • 14-提高交互性
      • 15-添加认证授权
      • 16-添加Metadata头数据
    • 其它框架
  • 界面

  • front
  • javascript
  • nextjs
北鸟南游
2024-06-24
目录

10-部分预渲染

原文链接:https://nextjs.org/learn/dashboard-app/partial-prerendering (opens new window)

到目前为止,您已经了解了静态和动态渲染,以及如何流式传输依赖于数据的动态内容。在本章中,让我们学习如何将静态渲染、动态渲染和流在同一路径中与**部分预渲染(PPR)**相结合。

部分预渲染是Next.js 14中引入的一个实验功能。此页面的内容可能会随着功能的稳定性而更新。

# 本章目标:

  • 什么是部分预渲染。
  • 部分预渲染的工作原理。

翻译时添加-本章是实验性质属性,可以不修改。

# 静态与动态路由

对于目前构建的大多数web应用程序,您可以在整个应用程序的静态和动态渲染之间进行选择,或者用于特定路由。在Next.js中,如果您在路由中调用动态函数(如查询数据库),整个路由变得动态。 然而,大多数路由并不是完全静态或动态的。例如,思考下 ecommerce site (opens new window) 这个网站,您可能希望静态呈现大部分产品信息页面,您可能想要动态地获取用户的购物车和推荐的产品,这允许您向用户显示个性化内容。 返回到您的仪表板页面,你认为哪些应该是静态或动态的组件? 准备好后,查看我们将如何拆分仪表板路线: image.png

  • <SideNav>组件不依赖数据,也不针对用户进行个性化设置,因此它可以是静态的。
  • <Page>中的组件依赖于经常更改的数据,这些数据将针对用户进行个性化设置,因此它们可以是动态的。

# 什么是部分预渲染

Next.js 14引入了Partial Prerendering的实验版本。一个新的渲染模型,允许您在同一路由中结合静态和动态渲染的优点。例如: image.png 当用户访问路由时

  • 提供包括导航栏和产品信息的静态路由外壳,确保快速的初始加载。
  • 外壳留下了一些插槽,其中动态内容(如购物车和推荐产品)将异步加载。
  • 异步并行传输,减少了页面的总体加载时间。

# 部分预渲染是如何工作的

部分预渲染使用使用react Suspense (opens new window) (在上一章中了解到的)推迟呈现应用程序的部分,直到满足某些条件。 Suspense fallback与静态内容一起嵌入到初始HTML文件中。在构建时(或在重新验证期间),静态内容被预先呈现以创建静态外壳。动态内容的呈现被推迟,直到用户请求路由为止。 在Suspense中封装组件不会使组件本身成为动态的,而是将Suspense用作静态代码和动态代码之间的边界。 我们看看如何在仪表板路由中实现PPR。

# 实现部分预渲染

通过添加ppr (opens new window)配置,在next.config.mjs文件中。

/** @type {import('next').NextConfig} */
 
const nextConfig = {
  experimental: {
    ppr: 'incremental',
  },
};
 
module.exports = nextConfig;
1
2
3
4
5
6
7
8
9

“incremental”值允许您对特定路线采用PPR。 接下来,将experiental_ppr segment config选项添加到仪表板布局中:

import SideNav from '@/app/ui/dashboard/sidenav';
 
export const experimental_ppr = true;
 
// ...
1
2
3
4
5

就是这样。在开发过程中,您可能看不到应用程序有什么不同,但在生产过程中您应该注意到性能的提高。Next.js将预先呈现路由的静态部分,并将动态部分推迟到用户请求。 Partial Prerendering的好处在于,您不需要更改代码即可使用它。只要您使用Suspense来包装路由的动态部分,Next.js就会知道路由的哪些部分是静态的,哪些是动态的。 我们相信PPR有可能成为web应用程序的默认渲染模型 (opens new window),将静态网站和动态渲染的最佳效果结合在一起。然而,它仍然是实验性的。我们希望在未来稳定它,并使其成为Next.js的默认构建方式。

# 总结:

回顾一下,您已经做了一些事情来优化应用程序中的数据获取:

  1. 在与您的应用程序代码相同的区域创建数据库,以减少服务器和数据库之间的延迟。
  2. 使用 React Server Components 在服务器上获取数据。这允许您在服务器上保留昂贵的数据获取和逻辑,减少客户端 JavaScript 包,并防止您的数据库机密暴露给客户端。
  3. 使用 SQL 仅获取您需要的数据,从而减少每次请求传输的数据量和在内存中转换数据所需的 JavaScript 量。
  4. 使用 JavaScript 并行获取数据——这样做是有意义的。
  5. 实现流式传输以防止缓慢的数据请求阻塞整个页面,并允许用户开始与 UI 交互而无需等待所有内容加载。
  6. 将数据获取移至需要它的组件,从而隔离路线的哪些部分应该是动态的。

在下一章中,我们将介绍获取数据时可能需要实现的两种常见模式:搜索和分页。

编辑 (opens new window)
上次更新: 2025/04/19, 14:22:11
09-Streaming数据模式
11-添加搜索和分页

← 09-Streaming数据模式 11-添加搜索和分页→

最近更新
01
色戒2007
04-19
02
真实real
04-19
03
Home
更多文章>
Theme by Vdoing | Copyright © 2018-2025 北鸟南游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式