Next.js第十一章(渲染基础概念)

作者:小满zs日期:2025/11/25

渲染基础

本章我们学习 CSR SSR SSG 三种渲染方式,以及Hydration水合的概念。

CSR

CSR是Client Side Rendering的缩写,即客户端渲染。像我们使用的Vue React Angular 等框架,都是CSR。

工作流程如下:

浏览器请求服务器 -> 服务器返回HTML/JS/CSS等文件 -> JS动态渲染生成DOM -> 浏览器渲染DOM

1graph TD
2A[浏览器发起请求] --> B[服务器返回<br/>空 HTML 骨架 + JS/CSS]
3B --> C[浏览器下载并解析 JS/CSS]
4C --> D[JS 动态调用 API 获取数据]
5D --> E[JS 生成 DOM 结构动态渲染]
6E --> F[浏览器渲染 DOM]
7F --> G[页面展示并可交互 无单独水合步骤]
8
9

优点:

  • 交互流畅,可直接响应
  • 前后端分离,前端注重UI,后端注重数据

缺点:

  • 首屏加载慢,因为需要下载JS/CSS等文件
  • SEO不友好,因为JS动态渲染(现在爬虫普遍已经支持JS抓取了)

适合场景:

  • 后台管理系统开发(后台系统不需要SEO,也不需要首屏加载速度)
  • 单页面应用开发(SPA)

SSR

SSR是Server Side Rendering的缩写,即服务端渲染。像我们使用的Next.js Nuxt.js等框架,都是SSR。

例如我们有一个电商网站,需要保证用户搜索关键词能搜到 xx商品, 还要注意 用户还可能是弱网环境,在地铁 电梯等,所以我们可以直接把API放到服务器请求,然后渲染成HTML页面返回给浏览器。

工作流程如下:

浏览器请求服务器 -> 服务器(内部调用API接口-> 渲染HTML页面) -> 浏览器直接读取HTML页面 并且 同时加载JS/CSS等文件 -> 执行hydration(水合)

1graph TD
2    A[浏览器发起请求] --> B[应用服务器接收请求]
3    B --> C[服务器内部调用 API 获取数据]
4    C --> D[服务器渲染完整 HTML 含数据]
5    D --> E[服务器返回 HTML + JS/CSS]
6    E --> F[浏览器展示 HTML 快速可见]
7    F --> G[加载 JS/CSS]
8    G --> H[执行 Hydration 水合]
9    H --> I[页面激活为可交互状态]
10

优点:

  • 首屏加载快,因为服务器已经渲染了HTML页面
  • SEO友好,搜索引擎能爬取到完整内容

缺点:

  • 开发成本高,需要懂服务端知识,全栈开发。
  • 服务器承担渲染工作,如果用户访问量大,对服务器配置要求高,增大成本

适合场景:

  • 电商网站开发
  • 博客网站开发
  • 官网/首页等

SSG

SSG是Static Site Generation的缩写,即静态站点生成。像我们使用的Vitepress Astro等框架,都是SSG。

例如我们需要一个查看文档的网站,例如Vue React 等文档,大家看到的都是一样的,所以我们在构建的时候,直接编译成静态文件,连接口都不用请求了,如果在部署CDN/Nginx等服务器,基本可以实现秒开。

工作流程如下:

项目构建 npm run build -> 生成静态文件(每个路由对应一个 HTML) -> 部署到CDN/Nginx等服务器 -> 浏览器请求服务器 -> 服务器返回HTML页面 -> hydration

1graph TD
2   A[本地构建] -->|npm run build| B[生成静态文件 每个路由对应 HTML]
3   B --> C[部署到 CDN/Nginx]
4   C --> D[浏览器发起请求]
5   D --> E[CDN/Nginx 返回静态 HTML]
6   E --> F[浏览器展示 HTML 瞬间可见]
7   F --> G[加载 JS/CSS]
8   G --> H[执行 Hydration 水合]
9   H --> I[页面激活为可交互状态]
10

优点:

  • 首屏加载极快(CDN 分发静态文件,无需服务器实时渲染)
  • 服务器压力小(CDN 直接承载请求,无需服务器执行 JS)
  • SEO 最优(静态 HTML 含完整数据,搜索引擎爬取无压力)

缺点:

  • 不适用于动态数据(数据更新需要重新构建部署,如实时股价、实时评论)
  • 详情页面如果过多(构建时间会长)

适合场景:

  • 技术文档
  • 静态营销页
  • 静态新闻站

Hydration(水合)

简单来说就是HTML他是静态的,需要通过JS才能变成动态的,不然HTML是没有任何交互效果的,当JS下载完成在赋予HTML交互效果的阶段称之为水合

以Next.js水合为例(详细版本):

服务端操作:

  • Next.js 服务器接收到用户请求。
  • 服务器执行 React 组件代码,获取数据(比如从 API 接口请求文章列表)。
  • 服务器将 React 组件渲染成静态 HTML 字符串(包含了文章列表的所有内容)。
  • 服务器将这个 HTML 字符串返回给浏览器。

客户端操作:

  • 浏览器接收到 HTML,立即解析并展示给用户(此时用户能看到文章列表,但点击 “查看详情” 按钮没有反应)
  • 浏览器开始下载页面所需的 JS 文件(包括 React 核心库、组件代码等)
  • JS 下载完成后,React 会执行 ReactDOM.hydrateRoot() 方法(在 React 18+ 中)
  • hydrateRoot() 会对比浏览器中的真实 DOM 和 React 组件的虚拟 DOM:
    • 如果结构一致,React 会给真实 DOM 绑定事件监听器。
    • 如果发现差异(比如服务器和客户端数据不一致),React 会发出警告,并以客户端渲染的结果为准。
  • 水合完成后,页面变成可交互的动态页面(用户可以点击按钮、滚动加载更多内容等)

Next.js第十一章(渲染基础概念)》 是转载文章,点击查看原文


相关推荐


docker中安装php运行环境
AdaTina2025/11/23

1. 拉取镜像 docker pull php:7.4-fpm # 以 PHP 7.4 为例 docker pull nginx:latest docker pull mysql:8.0 2. 创建网络 docker network create -d bridge my-network #   -d:让容器在后台以守护进程模式运行 3. 运行 MySQL 容器 docker run -d --name mysql8.0 --network my-network


CANN 异构计算架构:释放昇腾 AI 算力潜能,赋能自动驾驶实时感知
LucianaiB2025/11/22

CANN 异构计算架构:释放昇腾 AI 算力潜能,赋能自动驾驶实时感知 2025年10月,某自动驾驶算法团队在昇腾 Atlas 900 服务器上完成了一项关键测试:基于 CANN 架构优化的 FlashAttention 算子,将激光雷达点云实时处理延迟从 80ms 降至 15ms,这意味着原本需要 4 张 GPU 卡才能运行的感知算法,现在只需单张昇腾 910B 即可实现!这个突破背后,正是异构计算架构 CANN 释放的硬件潜能。 CANN异构计算架构:从硬件到应用的多层次协同设计 CANN(


WPF命令
她说彩礼65万2025/11/20

命令是一种设计模式(命令模式,Command Pattern),用于将“请求”封装为一个对象,从而: 解耦调用者(如按钮)与执行者(如 ViewModel 中的方法) 支持统一的启用/禁用控制(CanExecute) 实现撤销(Undo)、日志、队列等高级功能 在 WPF 中,命令通过 ICommand 接口实现。 public interface ICommand { event EventHandler CanExecuteChanged; bool CanExecute(o


私有化部署的gitlab的push failed问题,使用http远程连接(使用token或用户、密码)
知兀2025/11/19

报错 我使用了ssh push代码,结果push失败 ping ip也可能ping通 使用http远程连接仓库 一问才知道,服务器没开ssh 用http的连接 git remote add origin http://<局域网ip>/xxx.git Token 连接成功后,我想要push代码,然后出现了 右侧的 “Generate...” 按钮用于引导你在 GitLab 中生成符合 IDEA 集成要求的个人访问令牌 生成后复制 通过用户、密码登录


Python 的内置函数 tuple
IMPYLH2025/11/17

Python 内建函数列表 > Python 的内置函数 tuple Python 的内置函数 tuple() 用于创建一个不可变的序列(元组)。以下是关于 tuple() 函数的详细说明: 功能描述 tuple() 函数可以将可迭代对象(如列表、字符串、集合等)转换为元组。如果调用时不传入参数,则返回一个空元组。 语法 tuple(iterable) iterable(可选):任何可迭代对象(如列表、字符串、字典等)。如果未提供,则返回空元组 ()。 返回值 返回一个包含输入


Python 的内置函数 range
IMPYLH2025/11/16

Python 内建函数列表 > Python 的内置函数 range Python的内置函数range详解 range()是Python中一个非常实用的内置函数,主要用于生成一个不可变的整数序列。它在循环和迭代操作中应用广泛。 基本语法 range()函数有三种调用方式: range(stop):生成从0开始到stop-1的整数序列range(start, stop):生成从start开始到stop-1的整数序列range(start, stop, step):生成从start开始到s


在 Linux 环境中配置 Eclipse 以开发 Hadoop 应用
EmoGP2025/11/15

手动导入 JAR 包(无 Maven 时) 右键 Eclipse 项目 → Properties → Java Build Path → Libraries → Add External JARs。 依次选择以下目录中的所有 JAR 包


VisionWeaver:从“现象识别”到“病因诊断”,开启AI视觉幻觉研究新篇章
哔哩哔哩技术2025/11/14

前言 长久以来,我们只知道大型视觉语言模型(LVLM)会犯错,但始终缺乏一把“手术刀”,无法剖析其视觉感知的根源性缺陷。我们只知其然,不知其所以然。我们希望当 AI 模型观察图像时,不再凭空想象,不再“指鹿为马”。 现在,这一瓶颈被打破了。bilibili 用户技术中心提出 VisionWeaver 及其核心诊断工具 VHBench-10,带来了创新性的视角。VisionWeaver 不再依赖单一编码器,而是开创性地提出“上下文感知路由网络”,动态协同多个“视觉专家” 。而这一切得以实现的基础,


副业搞个 100 万,这 5 个 GitHub 项目不能错过。
逛逛GitHub2025/11/13

01、一人企业方法论 开源项目名字叫做《一人企业方法论》,目前已经更新到第二版。专门为想要独立创业或开展副业的个人提供实用指导。 无论是做自媒体、电商还是数字商品,即使没有技术背景,也能从中获得启发。 我读下来,这个开源项目的核心思想和我的想法非常契合。它倡导一种以个人为核心、精益化、可持续的商业模式。  它不追求规模化增长和资本驱动,而是专注于利用现代技术工具和系统化方法论,让个人能够独立构建并运营一个健康、盈利的微型企业。 如果你厌倦了大厂的撕逼,无效了的内卷,想找寻一份靠谱的副业。建议


深度解析:解决 backdrop-filter 与 border-radius 的圆角漏光问题
_志哥_2025/11/11

引言 在现代Web开发中,backdrop-filter 属性为创建毛玻璃等高级视觉效果提供了强大的支持,极大地提升了用户界面的层次感和现代感。然而,当我们将它与 border-radius 结合使用时,一个常见的渲染问题便会浮现:圆角边缘出现不应有的“漏光”现象。本文将深入探讨该问题的根源,分析现有解决方案的局限性,并最终提供一个基于 CSS Mask 的、行之有效的终极解决方案。 问题根源:渲染层级的冲突 要理解“漏光”现象,我们必须深入浏览器的渲染机制。这个问题的核心在于 backdrop

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读