Next.js14从入门到实战015:NextJS基础篇之部分预渲染

在本意,你将学习到......

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

结合静态和动态内容

目前,如果在路由中调用动态函数(例如 noStore()cookies() 等),整个路由都会变成动态的。

这就是当今大多数网络应用程序的构建方式。您可以为整个应用程序或特定路由选择静态或动态渲染。

不过,大多数路由并不完全是静态或动态的。路由可能既有静态内容,也有动态内容。例如,考虑一个电子商务网站。您可能可以预渲染产品页面的大部分内容,但也可能希望按需动态获取用户的购物车和推荐产品。

回到您的dashboard页面,您认为哪些组件是静态组件,哪些是动态组件?

准备就绪后,点击下面的按钮查看我们如何分割仪表板路线:

  • <SideNav> 组件不依赖于数据,也不是针对用户的个性化组件,因此可以是静态的。
  • <Page> 中的组件依赖于经常变化的数据,并将为用户提供个性化服务,因此它们可以是动态的。

什么是部分预渲染?

Next.js 14 包含了 "部分预渲染 "的预览,这是一项实验性功能,可以用静态加载外壳渲染路由,同时保留部分动态部分。换句话说,你可以隔离路由的动态部分。例如

用户访问路由时:

  • 提供静态路由外壳,确保快速初始加载。
  • 外壳留下了动态内容异步加载的漏洞。
  • 异步holes是并行流式传输的,从而缩短了页面的整体加载时间。

这与现在应用程序的行为方式不同,现在整个路由要么完全是静态的,要么是动态的。

部分预渲染将超快的静态边缘交付与完全动态的功能结合在一起,我们相信它有可能成为网络应用程序的默认渲染模型,将静态网站生成和动态交付的优点结合在一起。

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

部分预渲染利用了 React 的Concurrent API,并使用Suspense功能来延迟渲染应用程序的部分内容,直到满足某些条件(如加载数据)。

回退与其他静态内容一起嵌入到初始静态文件中。在构建时(或重新验证时),路由的静态部分会预先渲染,其余部分会延迟到用户请求路由时再渲染。

值得注意的是,用 Suspense 封装组件并不会使组件本身动态化(请记住,您使用 unstable_noStore 实现了这一行为),而是将 Suspense 用作路由的静态和动态部分之间的边界。

部分预渲染的好处在于,使用它无需更改代码。只要使用 Suspense 封装路由的动态部分,Next.js 就会知道路由的哪些部分是静态的,哪些是动态的。

摘要

经常之前几章的学习,我们做了以下几件事:

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

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

相关推荐
逐·風16 分钟前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫1 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦1 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子2 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山2 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享3 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
清灵xmf4 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询
大佩梨5 小时前
VUE+Vite之环境文件配置及使用环境变量
前端
GDAL5 小时前
npm入门教程1:npm简介
前端·npm·node.js
小白白一枚1115 小时前
css实现div被图片撑开
前端·css