前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React 设计模式 0x5:服务端渲染 SSR

React 设计模式 0x5:服务端渲染 SSR

作者头像
Cellinlab
发布于 2023-05-17 13:07:41
发布于 2023-05-17 13:07:41
4.2K00
代码可运行
举报
文章被收录于专栏:Cellinlab's BlogCellinlab's Blog
运行总次数:0
代码可运行

学习如何轻松构建可伸缩的 React 应用程序:服务端渲染 SSR

# 什么是 SSR

SSR(Server-Side Rendering,服务器端渲染)是指将 React、Vue、Angular 等客户端渲染的应用在服务器端执行一次,然后将渲染结果返回给浏览器进行展示的过程。相对于客户端渲染(CSR,Client-Side Rendering),SSR 可以提高页面的首屏加载速度和搜索引擎优化(SEO),因为它可以在服务器端直接生成 HTML,并将静态资源(如 CSS、JavaScript 等)和页面数据一起返回给客户端,从而减少客户端的渲染工作量。

# 为什么使用 SSR

并不是每个应用程序都需要使用服务器端渲染。以下是选择 SSR 的一些原因:

  • 更好的用户体验
  • 快速的功能开发
  • 性能

# Next.js 优缺点

# 优点

  • 良好的 SEO:
    • 搜索引擎优化(SEO)帮助您增加网站的访问量,而 Next.js 具有内置的功能来实现这一点
  • 强大的社区支持
    • Next.js 有一个非常庞大的社区,因为这个框架仍在不断发展,日益受欢迎
  • 快速刷新
    • 在 Nex.js 应用程序上进行代码更改时,更改会在几秒钟内在浏览器上反映出来
  • 快速显示
    • Next.js 非常快,因为大多数页面都是在服务器端预渲染并在客户端上提供的
  • 图片优化
    • 自动优化图像,现在支持 AVIF 图像,使图像比 WebP 小 20%
  • TypeScript 支持
    • 自动配置和编译 TypeScript
  • 零配置
  • 优秀的开发者体验
    • 使用 NextJS,我们花更多的时间编写功能,而不是在构建工具和 Webpack 上挣扎
  • 自动路由
    • NextJS 将项目结构化为页面,并添加路由
  • 数据获取
    • 根据应用程序的用例以不同的方式呈现内容
    • 包括使用服务器端呈现或静态站点生成进行预渲染以及使用增量静态再生在运行时更新或创建内容
  • 中间件
    • 此功能使您可以在请求完成之前运行代码,以便在请求和重定向用户时更改响应到另一个路由
  • 数据安全
    • Next.js 不会阻塞浏览器以一次性下载和执行大量的 JavaScript 代码,它有潜力显着改善总阻塞时间(TBT)等指标
    • TBT 越好,Web 应用程序就越快,对您的用户有用,这使得将他们转化为客户更有可能
    • 等待页面进行交互可能会增加跳出率
      • 这是另一个与 SEO 相关的因素
  • 性能

# 缺点

  • 研发管理
    • 如果你想使用 NextJS 构建一个在线商店,但是你没有内部的开发团队,你将需要一个专门负责开发和管理的人员
  • 路由问题
    • 由于基于文件的路由限制了 Next.js 在节点路由方面的能力,因此如果你的项目需要动态路由,你将不得不使用 Node.js 服务器
  • 没有状态管理器
    • Next.js 框架中没有内置的状态管理器
    • 为了充分利用状态管理器,你将需要另一个工具来完成它
  • 构建时间限制
    • 构建网站和应用程序的时间是受限制的
    • 对于 Next.js 而言,添加新页面到网站或应用程序不是问题,然而,对于具有许多页面的应用程序,整个网站的静态创建意味着构建时间可能会非常长

# Next.js 预渲染

Next.js 对每个页面都进行预渲染,即每个页面的 HTML 都是提前生成的,而不是由客户端完成的。

预渲染有两种类型,即:

  • 静态生成(Static Generation)
  • 服务器端渲染(Server-side Rendering)

# 静态生成

在构建时生成 HTML 页面,这些页面将在每个请求上重用。

为了生成页面,我们需要导出页面组件或 getStaticProps 函数(需要的时候,还可以导出 getStaticPaths 函数)。

# 不带数据的静态页面
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Contact = () => {
  return (
    <div>
      <h1>Contact</h1>
      <p>Send us a message!</p>
    </div>
  );
};

export default Contact;

# 带数据的静态页面

内容依赖外部数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function UserList({ users }) {
  return (
    <ul>
      {users.map((user) => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

export async function getStaticProps() {
  const res = await fetch("https://.../users");
  const users = await res.json();

  return {
    props: {
      users,
    },
  };
}

export default UserList;

路径依赖外部数据

  • 如,我们创建一个名为 users/[id].js.js 文件,用于根据用户的 id 显示单个用户的详细信息。我们需要从 users/[id].js 文件中导出一个名为 getStaticPaths 的异步函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function User({ user }) {
  return (
    <div>
      <h1>{user.name}</h1>
      <p>{user.bio}</p>
    </div>
  );
}

export async function getStaticPaths() {
  const res = await fetch("https://.../users");
  const users = await res.json();

  const paths = users.map((user) => ({
    params: { id: user.id },
  }));

  return { paths, fallback: false };
}

export async function getStaticProps({ params }) {
  const res = await fetch(`https://.../users/${params.id}`);
  const user = await res.json();

  return {
    props: {
      user,
    },
  };
}

export default User;

# getServerSideProps

通过导出名为 getServerSideProps 的异步函数,可以在每个请求时生成 HTML。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function UserList({ users }) {
  return (
    <ul>
      {users.map((user) => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

export async function getServerSideProps() {
  const res = await fetch("https://.../users");
  const users = await res.json();

  return {
    props: {
      users,
    },
  };
}

export default UserList;

# 使用 Node.js 和 Express.js 构建 SSR

使用 Node.js 和 Express.js 进行服务器端渲染是另一种从服务器端渲染 React 页面的方式。Express.js 创建路由,我们可以使用该路由基于用户的请求指定页面。

可以参考这篇文章:使用 Node.js 和 Express.js 构建 SSR (opens new window)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/2/7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Next.js - SSR / SSG / CSR / ISR / Dynamic Routing
Next.js 提供了多种网页渲染方式,这取决于你的服务应用的场景,包括服务端渲染、客户端渲染、静态生成、增量静态生成等。
轻量级云原生架构实验室
2022/12/01
1.3K0
React 必学SSR框架——next.js
F首先我们就回顾一下,我们到底是怎么告别了使用 php/jsp 做服务器端渲染,进入前后端分离的客户端渲染时代,又为什么重新回到了服务端渲染。
狂奔滴小马
2021/11/15
8K0
React 必学SSR框架——next.js
React 服务端渲染
在以往的概念里,渲染的工作更多的是放在客户端进行的,那么为什么现在我们要让服务端来做这个工作?
西岭老湿
2021/03/10
2.4K0
React 服务端渲染
Next.js进阶:静态生成、服务器端渲染与SEO优化
Next.js在现代Web开发中处于重要地位,尤其是其对静态生成(Static Generation, SG)、服务器端渲染(Server-Side Rendering, SSR)以及搜索引擎优化(Search Engine Optimization, SEO)的强大支持。在本文中,我将深入探讨这些核心特性的工作原理、应用场景及最佳实践,并通过代码示例演示如何在实际项目中高效利用Next.js实现高性能、高SEO友好的应用。
Jimaks
2024/04/16
1.4K0
梳理NextJS13两种路由下的不同渲染方式:SSG,ISR,SSR,RSC
NextJS是一款基于 React 进行全栈开发的框架,是当下非常火的React全栈框架之一,在去年NextJS发布了V13版本,而本文将基于V13版本的app路由,来梳理它的几种不同的渲染方式的实现,并且与pages路由做对比。
Jou
2023/09/01
2.1K1
梳理NextJS13两种路由下的不同渲染方式:SSG,ISR,SSR,RSC
Next.js静态页面渲染技术(静态生成和服务端渲染):BSR/SSR/SSG
next是一款用JS开发的全栈框架,它是基于express框架基础上开发而成,可以用react写客户端,node.js写服务端。一份代码可在前后端同时运行,这在next中称之为同构!
周陆军博客
2023/05/14
4.1K0
从 Next.js 看企业级框架的 SSR 支持
面向生产使用的 React 框架(废话)。提供了好些开箱即用的特性,支持静态渲染/服务端渲染混用、支持 TypeScript、支持打包优化、支持按路由预加载等等:
ayqy贾杰
2020/12/14
4K0
从 Next.js 看企业级框架的 SSR 支持
Next.js与SSR:构建高性能服务器渲染应用
在Next.js中,每个.js或.jsx文件的组件都会被自动处理为SSR页面。例如,创建一个pages/index.js文件:
天涯学馆
2024/06/02
3690
使用 NextJS 和 TailwindCSS 重构我的个人博客
这是笔者第三次重构博客,虽然博客应用是最简单的应用,但学习新技术何不从重构博客开始?
狂奔滴小马
2021/11/15
3K0
使用 NextJS 和 TailwindCSS 重构我的个人博客
基于 Next.js 的 SSR/SSG 方案了解一下?
本文主要是讲讲如何使用 Next.js 框架实现服务端渲染,将有效提升网页的 SEO 和首屏渲染速度,说不定哪天就用上了,是吧!
小东同学
2022/07/29
5.9K0
基于 Next.js 的 SSR/SSG 方案了解一下?
服务端渲染提升Web应用体验
服务器端渲染在服务器上生成 HTML。了解 SSR 如何提升 Web 应用的性能和 SEO,以及何时使用它以及何时使用客户端渲染。
云云众生s
2024/11/25
2700
服务端渲染提升Web应用体验
React 使用Next.js进行服务端渲染
React是一个流行的JavaScript库,用于构建现代Web应用程序。然而,由于React在客户端渲染时需要大量的JavaScript代码,因此会影响应用程序的性能和SEO优化。为了解决这个问题,可以使用服务器渲染(SSR)来提高性能和SEO优化。在本文中,我们将详细介绍如何使用Next.js进行服务器渲染的React应用程序。
世间万物皆对象
2024/03/20
3490
Next.js基础教程:入门与实战
Next.js是一个流行的React框架,用于构建服务器 - 渲染(SSR)和静态网站生成(SSG)的现代Web应用程序。它提供了一种简单而高效的方式来开发具有高性能和良好可扩展性的Web应用。其独特之处在于能够充分利用服务器端渲染的优势,提高首屏加载速度,改善搜索引擎优化(SEO),同时也方便与React的各种生态系统集成。
Front_Yue
2025/01/06
8520
Next.js基础教程:入门与实战
Next.js 简明教程
最近用Next.js + Editor.js 撸了一个博客系统。开发起来甚是畅滑,如果你喜欢React,又有同构的需求,不妨由此文入手。
小刀c
2022/09/21
3.2K0
Next.js 简明教程
Next.js 有哪些主要功能?
Next.js 是由 Vercel 开发的一款开源 React 框架,以其丰富的高级功能和对应用性能的优化备受开发者青睐。
前端小智@大迁世界
2025/02/06
3660
Next.js + TypeScript 搭建一个简易的博客系统
来记录下学习(踩坑)的过程,这篇文章的代码都在https://github.com/Maricaya/nextjs-blog-1啦。
coder_koala
2020/09/17
4.2K0
深入探讨 Web 开发中的预渲染和 Hydration
像Next.js、Gatsby.js和Remix这样的框架大家或多或少使用过,但是它们具体是如何工作的呢
ACK
2024/10/10
6620
深入探讨 Web 开发中的预渲染和 Hydration
服务端渲染(SSR)与客户端渲染(CSR)详解
在早期 Web 时代,网页主要是静态 HTML 页面,用户点击链接后会刷新整个页面。随着网络与前端技术的发展,人们开始追求更好的页面性能与用户体验,尤其是在移动端和实时交互场景下,对于页面加载速度的要求不断提升。
创意妙计
2025/01/15
1.4K0
服务端渲染(SSR)与客户端渲染(CSR)详解
React 应用架构实战 0x3:构建和配置页面
这一节,将学习 Next.js 中的路由工作原理以及可以使用的渲染方法,以充分利用 Next.js 的特性。然后,我们将学习如何配置每个页面的布局,使应用程序看起来和感觉像一个单页应用程序。
Cellinlab
2023/05/17
9130
React 应用架构实战 0x3:构建和配置页面
前端全栈进阶 Nextjs打造跨框架SaaS应用
Nextjs是一个使用react作为前端框架底层的支持SSR(请求时渲染)、SSG(构建时渲染)等技术的全栈框架,在2022年的服务端框架中排名第一。
小企鹅204415010
2024/05/06
5480
推荐阅读
相关推荐
Next.js - SSR / SSG / CSR / ISR / Dynamic Routing
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档