Next.js 服务器端渲染 VS 客户端渲染对比

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

随着现代 Web 应用越来越复杂,越来越多的前端工程师们开始关注网站的性能以及搜索引擎优化 (SEO)。其中,服务器端渲染 (Server-Side Rendering,SSR) 和客户端渲染 (Client-Side Rendering,CSR) 是两种常用的渲染方式。本篇文章将为您深入分析 Next.js 服务器端渲染和客户端渲染之间的区别,并提供有深度和指导意义的学习内容。

SSR 和 CSR 简介

  • SSR:当页面请求被发送至服务器时,服务器执行应用逻辑,检索相关数据并生成 HTML 标记。然后将其发送回浏览器,该浏览器将其呈现给用户。
  • CSR:浏览器通过从服务器获取必需的 HTML、CSS 和 JavaScript 来呈现页面。一旦这些文件被下载且 JavaScript 被执行,一种称为 Virtual DOM 的技术就被用来渲染最终的页面。

首屏渲染与 TTFB

  • 首屏渲染:是指用户在屏幕上看到的第一个页面内容的渲染速度。对于用户来说,首屏渲染速度是他们的第一印象,它很大程度地影响用户的体验。
  • TTFB:是指从浏览器向服务器发送请求时到服务器开始响应该请求所花费的时间。TTFB 通常被认为是性能测试中的一个关键指标,因为它直接影响了任何现代 Web 应用的用户体验。

通过 SSR,首屏渲染延迟通常较短,因此用户将立即看到网站的内容,这对于提高用户体验和 SEO 非常重要。在 SSR 的情况下,TTFB 通常较短,因为大部分 HTML 标记将在服务器上生成,并由服务器直接传输回浏览器。相比之下,CSR 往往需要下载 JavaScript 代码才能从 Virtual DOM 真正绘制 HTML 标记,这需要更多的网络请求和处理时间。

Next.js 服务器端渲染

Next.js 是一个基于 React 的 SSR 框架。它允许您在构建 React 应用时使用服务器端渲染,这可以将 HTML 标记直接发送给浏览器,从而提高性能和 SEO。

使用 Next.js 进行 SSR 很容易,并且不需要太多的配置。以下是一个简单的例子:

-- --------------
------ ----- ---- --------

-------- ---------- ---- -- -
  ------ -
    -----
      ---------- ------------
    ------
  --
-

------ ----- -------- -------------------- -
  ------ -
    ------ -
      ----- ------------ ----------
    --
  --
-

------ ------- ---------

在上面的示例代码中,我们使用了 getServerSideProps 来生成我们需要返回给浏览器的数据,它将在服务器上运行。当访问我们的应用程序时,HTML 标记将被生成并直接发送到浏览器,而不需要执行 JavaScript 代码。

Next.js 客户端渲染

与 SSR 相反,Next.js 中也可以使用 CSR 进行渲染:您可以在浏览器中使用 ReactReactDOM 将组件渲染到页面中。

-- --------------
------ ----- ---- --------

-------- ---------- ---- -- -
  ----- ------- --------- - ---------------------

  ----- -------- ---------- -
    ----- --- - ----- -------------------
    ----- ------ - ----- -----------
    -----------------
  -

  ------ -
    -----
      ---------- -------------
      ------- ----------- -- ---------------- -------------
    ------
  --
-

------ ------- ---------

在上面的示例代码中,我们在客户端使用了一个简单的按钮来通过 API 路由请求数据。虽然这里的的 loadData 函数可能会产生一些性能问题,但这个例子很清晰地展示了在 CSR 模式下如何用 Next.js 渲染一个简单的页面。

SSR 和 CSR 的使用场景

下面是 SSR 和 CSR 的优缺点:

SSR 的优点:

  • 更快的首屏加载
  • 更好的 SEO
  • 更少的网络请求

SSR 的缺点:

  • 更低的性能(因为在每个请求期间都需要进行计算);
  • 更高的服务器成本
  • 可能需要重新构建您的应用程序以支持 SSR。

CSR 的优点:

  • 更少的服务器资源使用(因为绝大部分计算工作在客户端完成)
  • 更好的交互性

CSR 的缺点:

  • 更慢的首屏渲染速度
  • 更多的网络请求

因此,SSR 模式通常适合对由于 SEO 要求或对于客户快速接收数据更敏感的应用程序,而 CSR 模式则适合需要更高交互性或需要频繁更新状态的应用程序。

结论

这篇文章深度了解了 Next.js 服务器端渲染和客户端渲染的两种渲染方式。我们讨论了他们的速度、优点及缺点,以及何时使用 SSR 和 CSR。现在您可以自由地选择适合您应用程序的一种渲染方式,从而最大化您的用户体验。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/67185409ad1e889fe22a29f9


猜你喜欢

  • RxJS 中的 buffer 和 bufferTime 操作符使用详解

    在 RxJS 中,buffer 和 bufferTime 操作符用于将 Observable 的数据流包裹在一定的时间或事件的缓冲区中。这些操作符的灵活性让它们在多种场景下都能派上用场,且在前端开发中...

    17 天前
  • GraphQL 的缓存策略指导

    GraphQL 是一种用于 API 的查询语言,它使得应用能够精确地描述需要的数据。相比于 RESTful API,GraphQL 具有更细粒度、灵活性更高的数据提取能力,但是也带来了更高的数据请求次...

    17 天前
  • ECMAScript 2016:抑制 try…catch 语句中的 warning 信息

    在 JavaScript 开发中,使用 try…catch 语句来捕获异常是一种常见的做法。然而,在旧版本的 ECMAScript 中,如果在 catch 块中没有使用被捕获异常的变量,会出现警告信息...

    17 天前
  • CSS Reset 与跨域加载的样式文件冲突解决方案

    如果你在开发网站时用过多种样式文件,你可能会遇到 CSS Reset 技术和跨域加载样式文件之间发生冲突的问题。这会使你的网站样式出现问题并且加大调试难度。下面我们就来详细介绍如何解决这个问题。

    17 天前
  • Serverless 框架应用中的自定义域名配置与使用方法

    随着云计算技术的不断发展,越来越多的应用程序开始采用 Serverless 框架进行开发和部署。Serverless 框架减少了对服务器和其它基础设施的需求,同时提供了更高效的代码管理和自动化部署机制...

    17 天前
  • React Native 和 React Router:在移动应用中实现路由

    随着移动应用市场的不断扩大,越来越多的开发者将目光投向了移动开发领域。React Native 及相应的组件库 React Router,就是一些使得 React 开发移动应用变得更加简单和流畅的工具...

    17 天前
  • 使用 Express.js 和 PM2 部署 Node.js 应用程序

    前端是很多人选择的职业之一,其中 Node.js 技术也越来越受到开发者的关注。在前端开发中,使用 Express.js 和 PM2 部署 Node.js 应用程序是很常见的一种方式。

    17 天前
  • ECMAScript 2019 的新增特性:可选参数的依赖注入实践指南

    ECMAScript 2019 的新增特性中,最引人注目的特性之一就是可选参数的支持。这一特性使得我们能够更加方便地进行参数的传递和统一管理。同时,结合依赖注入的技术,可选参数的实践也变得更加简单和可...

    17 天前
  • Sequelize 中如何实现统计功能的操作?

    在开发前端应用程序时,经常需要从数据库中提取数据,并统计它们的数量。Sequelize是一个支持Node.js的ORM框架,可以用于管理与关系型数据库的交互,如MySQL、PostgreSQL、SQL...

    17 天前
  • 使用 ES9 async/await 特性快速优化代码

    随着前端技术的不断发展,越来越多的复杂业务需求需要使用异步编程技术来完成。在过去,我们使用 Promise 或 Generator 等异步编程技术来处理异步操作,但是这些技术都有其局限性。

    17 天前
  • GraphQL 与 Headless CMS 的便捷搭配

    随着前端技术的不断发展和应用场景的不断扩大,前端开发人员也需要不断拓宽自己的技术栈,才能适应越来越复杂的需求。其中,GraphQL 和 headless CMS 成为了近年来前端领域中的“明星技术”。

    17 天前
  • 如何根据屏幕大小在响应式设计中对页面元素进行重新排序

    随着越来越多的人使用移动设备浏览网站,响应式设计已成为现代web设计的标准。其中一个关键的方面是让页面元素在不同的屏幕大小下重新排列,以确保用户能够轻松访问页面。 响应式设计中的元素排序 在响应式设计...

    17 天前
  • Vue.js 2.0 开发 SPA 过程中遇到的坑点及解决方法

    Vue.js 是一种现代化的 JavaScript 框架,它被广泛用于开发单页面应用程序(SPA)。相比于传统的获取页面渲染的方式,SPA 可以在不刷新整个页面的情况下从服务器加载内容。

    17 天前
  • 如何使用 Kubernetes 进行应用程序的自我修复

    Kubernetes 是一个流行的容器编排平台,支持自动伸缩、负载均衡、服务发现和容错等功能。其中容错是 Kubernetes 的重要特性之一,Kubernetes 能够监听容器的健康状态,并在出现故...

    17 天前
  • Babel 7.x 版升级手记及配置项

    简介 Babel是一个流行的 JavaScript 编译器,支持将 ES6+ 的语法转换为浏览器或 Node.js 可以理解的语法。在 2018 年底发布的 Babel 7.x 版本中,有一些重要的变...

    17 天前
  • RxJS 组合操作符 combineLatest 与 switchMap 的结合

    RxJS 组合操作符 combineLatest 与 switchMap 的结合 RxJS 是一个基于观察者模式的 JavaScript 库,它可以用于在浏览器中响应式地处理异步操作。

    17 天前
  • 性能优化遇到的坑及解决方法

    在前端开发中,性能优化是一个常见的问题。一方面,在今天的互联网时代,用户对速度和响应时间的要求越来越高,因此在进行性能优化时需要非常注意。另一方面,随着前端技术的发展和更新迭代,新的技术和框架也带来了...

    17 天前
  • 带你了解无障碍设计:实践和标准

    无障碍设计,是指在设计产品时,使所有人都能够舒适地使用该产品,包括有身体上,听力上,视力上,认知上等不同特殊需求的人群。无障碍设计是为了让每个人都享有公平和平等的机会,而非仅仅让多数受众受益。

    17 天前
  • React Native 组件测试:使用 Enzyme

    React Native 渐渐成为了一种非常流行的前端框架,它使得我们能够使用 Javascript 来开发原生的移动端应用。但是,随着 React Native 项目的复杂度增加,我们需要更好的方法...

    17 天前
  • 如何通过 Headless CMS 实现跨平台信息共享?

    在现代 Web 应用程序和网站开发中,跨平台信息共享是至关重要的。传统的 CMS(内容管理系统)因限制在内容管理和呈现方面而无法满足当前的跨平台需求。Headless CMS 可以解决这个问题,提供了...

    17 天前

相关推荐

    暂无文章