Next.js -服务端组件如何渲染

#题引:我认为跟着官方文档学习不会走歪路

服务器组件渲染到客户端发生了什么?

  1. 请求到达服务器
    用户在浏览器中请求一个页面。
    Next.js 服务器接收到这个请求,并根据路由找到相应的页面组件。
  2. 服务器组件的渲染
    Next.js 识别出请求的页面包含服务器组件。
    服务器组件在服务器端执行,进行以下操作:
  • 数据获取:组件内部可以直接调用 API 或数据库获取所需的数据。
  • HTML 生成:根据获取的数据,构建 HTML 内容。
  1. 生成有效负载
    服务器组件生成的 HTML 和相关数据一起被称为React 服务器组件有效负载 (RSC Payload)
    有效负载是是渲染后的 React 服务器组件树的紧凑二进制表示,包括:
  • 服务器组件的渲染结果:组件的结构和内容,组件在服务器端获取的数据等
  • 客户端组件应该渲染的位置的占位符以及它们的 JavaScript 文件引用
  • 从服务器组件传递到客户端组件的任何 props
  1. 发送响应到客户端
    生成的有效负载通过 HTTP 响应发送到客户端。
  2. 客户端接收和渲染
    浏览器接收到服务器发送的 HTML 内容。
    浏览器解析 HTML,将其渲染为可视化的页面。此时,用户可以看到页面的内容,而无需等待 JavaScript 的加载和执行。
  3. 客户端交互
    如果页面中包含客户端组件(例如需要交互的部分),Next.js 会在客户端加载相应的 JavaScript。
    客户端组件会接管页面的交互逻辑,使得页面变得动态和响应式。

服务器组件不同的渲染策略

服务器渲染有三种子类型:静态、动态和流式传输。

1: 静态渲染(默认)
使用静态渲染时,路由会在构建时渲染,或在数据重新验证后在后台渲染
步骤:

  • 构建时生成:在构建时,Next.js 预先生成页面的 HTML。
  • 数据获取:在构建时获取数据并生成静态 HTML。
  • 发送静态文件:将生成的静态 HTML 文件存储在 CDN 上。
  • 客户端请求:用户请求页面时,直接从 CDN 获取静态 HTML。
  • 客户端渲染:浏览器解析并渲染页面。

这种实现方式称之为静态生成SSG,静态渲染本身不依赖于 CDN,但结合使用 CDN 可以显著提高性能和用户体验。是否使用 CDN 取决于具体的项目需求和部署策略。

默认使用静态渲染的意思是:在渲染过程中,如果发现动态 API或未缓存的数据请求(这些数据通常是实时生成的,或者是用户特定的、频繁变化的信息),Next.js 将切换到动态渲染整个路由,否则就会默认为静态渲染,它将在 next build 时被预渲染为静态页面。这些动态API包括:

  • cookies
  • headers
  • connection
  • draftMode
  • searchParams prop
  • unstable_noStore
  • unstable_after

2: 动态渲染
使用动态渲染时,路由会在请求时为每个用户渲染,它的流程即上面“服务器组件渲染到客户端发生了什么?“标题下所描述的用例步骤。

当路由具有针对用户个性化的数据或只能在请求时获知的信息时,动态渲染很有用,比如 cookies 或 URL 的搜索参数。

3:流式传输
流式传输(Streaming)是一种用于优化数据加载和页面渲染的技术。它允许服务器在生成页面时逐步发送内容,而不是等待整个页面生成完成后一次性返回。这种方式可以提高用户体验,特别是在处理大型数据集或复杂页面时。

你可以使用 loading.js 和带有 React Suspense 的 UI 组件开始流式传输路由段。

  • loading.js 文件用于定义加载状态的 UI。当某个路由段正在加载时,loading.js 可以提供一个用户友好的加载指示器或占位符。
  • Suspense 组件允许你在等待某些异步操作(如数据加载)完成时,显示一个替代的 UI(例如加载指示器),然后在操作完成后切换到你的组件。

服务端和客户端组合模式

大多数 Next.js 应用采用的是服务端和客户端的组合模式。这种模式结合了服务器端渲染(SSR)和客户端渲染(CSR)的优点。

  • 服务器生成完整的 HTML 页面并发送给客户端。这样可以确保用户在首次加载页面时快速看到内容
  • 客户端使用 JavaScript 在浏览器中动态加载和渲染数据。通常在用户与页面交互时(如点击按钮、导航等)进行数据请求。

Nextjs默认服务端组件,如果要使用客户端组件,可以在文件顶部、导入语句之前添加 React 的 “use client” 指令。

实现这种模式内部会涉及到一个API:hydrateRoot,(在 React 18 之前的版本,使用的是 ReactDOM.hydrate)它的主要作用是将服务端生成的 HTML 内容与客户端的 React 组件树进行“水合”(hydration),以便实现客户端的交互功能。

水合:将服务端渲染的静态 HTML 内容与客户端的 React 组件进行结合,使得 React 可以接管这些内容,添加交互性。在水合过程中,React 会保留组件的状态,使得用户在加载页面时不会丢失之前的状态。

服务端组件和客户端组件的不同使用场景的快速总结:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925648.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法——N叉树(自学笔记)

本文参考 N 叉树 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 遍历 前序遍历:A->B->C->E->F->D->G后序遍历:B->E->F->C->G->D->A层序遍历:A->B->C->D->…

SpringSecurity6

1.快速入门 2.SpringSecurity底层原理 使用的是委托过滤器,委托过滤器实际上就是 sevlet 过滤器 将自己放入Sevlet环境下 然后里面是一个 过滤器链代理 代理类下又是一个代理过滤器链的集合, 对于不同请求可以有不同的过滤器链, springsecurity有个默认的过滤器链 Defau…

芯片测试-RF中的S参数,return loss, VSWR,反射系数,插入损耗,隔离度等

RF中的S参数,return loss, VSWR,反射系数,插入损耗,隔离度 💢S参数💢💢S11与return loss,VSWR,反射系数💢💢S21,插入损耗和增益&#…

前端页面或弹窗在线预览文件的N种方式

需求:后端返回给前端一个地址后,在前端页面上或则在弹框中显示在线的文档、表格、图片、pdf、video等等,嵌入到前端页面 方式一: 使用vue-office 地址:vue-office简介 | vue-office 个人感觉这个插件是最好用的&#x…

剪映自动批量替换视频、图片素材教程,视频批量复刻、混剪裂变等功能介绍

一、三种批量替换模式的区别 二、混剪裂变替换素材 三、分区混剪裂变替换素材 四、按组精确替换素材 五、绿色按钮教程 (一)如何附加音频和srt字幕 (二)如何替换固定文本的内容和样式 (三)如何附加…

【天地图】HTML页面实现车辆轨迹、起始点标记和轨迹打点的完整功能

目录 一、功能演示 二、完整代码 三、参考文档 一、功能演示 运行以后完整的效果如下: 点击开始,小车会沿着轨迹进行移动,点击轨迹点会显示经纬度和时间: 二、完整代码 废话不多说,直接给完整代码,替换…

Node报错:npm error code ETIMEDOUT

1、报错详细信息 npm error code ETIMEDOUT npm error syscall connect npm error errno ETIMEDOUT npm error network request to https://registry.npmjs.org/express failed, reason: connect ETIMEDOUT 104.16.1.35:443 npm error network This is a problem related to ne…

FPGA工具链及功能介绍

一、处理流程 把verilog等源码,变为FPGA中可执行的比特流文件,主要包含这些步骤: 步骤功能转译将verilog代码转化为更详细的语法,增加更多细节内容技术映射将每个vrilog用到的模块,对应到FPGA的物理器件上优化优化冗余…

自然语言能开发项目? 基于Agent的AI开发团队提示词分享

文章目录 概述真正落地效果(参考codeflying)开发团队各角色提示词产品经理软件架构师UI/UX 设计师前端开发工程师后端开发工程师软件测试工程师网络安全专家概述 自然语言开发应用?这在以前是天方夜谭,可是在AIGC时代,这变成可能。原理就是基于大模型和智能体技术的多智能…

【MQ】大白话告诉你什么是MQ,没有比这还详细还易懂的文章了吧,以RabbitMQ为例,从小白到大神

目录 分布式系统通信方式 MQ选型与应用场景 应用场景(优势) RabbitMQ工作模型 RabbitMQ简介 RabbitMQ 工作模型(流程)​编辑 Docker安装配置RabbitMQ RabbitMQ管理控制台 RabbitMQ 简单模式构建生产者 RabbitMQ 简单模式…

html+css+js网页设计 去哪旅游官网6个页面

htmlcssjs网页设计 去哪旅游官网6个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#x…

AI与ArcGIS Pro的地理空间分析和可视化

AI思维已经成为一种必备的能力,ArcGIS Pro3的卓越性能与ChatGPT的智能交互相结合,将会为您打造了一个全新的工作流程! 那么如何将火热的ChatGPT与ArcGIS Pro3相结合,使我们无需自己进行复杂的编程,通过强大的ChatGPT辅助我们完成地…

Java Collection

Collection——狭义上的集合 接口Collection派生了三大类集合,分别是List、Set、Queue/Deque。 List,有序集合,提供了访问、插入、删除等操作。Set,不允许重复元素的,这是和List最明显的区别,不存在两个对…

深度学习基础1

目录 1. 深度学习的定义 2.神经网络 2.1. 感知神经网络 2.2 人工神经元 2.2.1 构建人工神经元 2.2.2 组成部分 2.2.3 数学表示 2.2.4 对比生物神经元 2.3 深入神经网络 2.3.1 基本结构 2.3.2 网络构建 2.3.3 全连接神经网络 3.神经网络的参数初始化 3.1 固定值初…

前端js面试知识点思维导图(脑图)

如果看着不清晰可以去https://download.csdn.net/download/m0_73761441/90058523访问下载,无需积分 使用百度脑图制作,可以一键导入下面的文本生成自己的脑图 js相关面试题、知识点 数据类型 1. 数据类型分类?分别包含&#xff…

单片机知识总结(完整)

1、单片机概述 1.1. 单片机的定义与分类 定义: 单片机(Microcontroller Unit,简称MCU)是一种将微处理器、存储器(包括程序存储器和数据存储器)、输入/输出接口和其他必要的功能模块集成在单个芯片上的微型…

排序(数据结构)

排序: 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 常见排序法 . 常见排序算法的实现 插入排序 1.直接插入排序 2.希尔排序( 缩小增量排序) 希尔排序的特性总结&#x…

web安全攻防入门教程

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中,保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现,还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻…

houdini肌肉刷pin点的方法

目标:产生gluetoanimation这个属性 主要节点:attribute paint(或者muscle paint) 步骤1: 导入肌肉资产 导入的是rest shape的肌肉 在有侧边栏可以打开display group and attribute list,方便查看group。不同的肌肉块按照muscl…

Online Judge——【前端项目初始化】项目通用布局开发及初始化

目录 一、新建layouts二、更新App.vue文件三、选择一个布局(Layout)四、通用菜单Menu的实现菜单路由改为读取路由文件 五、绑定跳转事件六、同步路由到菜单项 一、新建layouts 这里新建一个专门存放布局的布局文件layouts: 然后在该文件夹&…