SSR 和 CSR 的区别及使用 Next.js 实现 SSR 的过程

阅读时长 6 分钟读完

随着前端开发的不断发展,两种主流的渲染方式 SSR(服务器端渲染) 和 CSR(客户端渲染)应运而生。本文将详细介绍 SSR 和 CSR 的区别,并讲解如何使用 Next.js 实现 SSR。

SSR 和 CSR 的区别

SSR

SSR 是指在服务器端将 JavaScript 插值的结果渲染成 HTML 后,将其发送到浏览器。在进入页面时,浏览器会显示一个完整的页面。此时,页面中的数据已经被初始化,并且 SEO 优化也比较容易实现。

SSR 的优点包括:

  • 更好的 SEO 支持,因为搜索引擎爬虫可以直接抓取完整页面的内容。
  • 更快的内容加载速度,因为用户直接看到了渲染好的 HTML。
  • 更少的网络带宽使用,因为服务器提供的 HTML 文件比客户端请求的数据更小。

SSR 的缺点包括:

  • 服务器需要处理大量请求,需要更强大的硬件支持。
  • 部分复杂或频繁变动的交互需求不太适合 SSR。
  • 一些常规性的前端技术,例如 H5 5.0 的离线应用、pushState 等都需要通过 JS 客户端实现。

CSR

CSR 是指在客户端浏览器通过 JavaScript 技术实现页面内容的渲染,而不是在服务器端进行渲染。页面初始渲染时只包含一个 HTML 文件,无论是数据还是样式,都是通过 JavaScript 请求获得并显示在页面上。

CSR 的优点包括:

  • 更灵活的交互方式,例如可以实现单页面应用。
  • 呈现的单元更加轻便,访问后端的 API,服务器端产生的数据可以大大减少压力。
  • 更高的用户体验度,例如切换页面时,不需要刷新页面,用户也可以下载 Vue.js 或 React.js 等前端框架来实现想要的动画效果。

CSR 的缺点包括:

  • 对 SEO 不友好,因为爬虫无法识别动态渲染的内容。
  • 首次加载时,需要加载较多的 JavaScript 脚本,因此网页加载速度可能会变慢。
  • 相对于 SSR 后端的硬件负担小,但前端 workload 会增加。

Next.js 实现 SSR

Next.js 是一个支持服务器端渲染的 React 框架。使用 Next.js 实现 SSR 可以极大地降低若干客户端 JS 跟服务器性能压力,我们下面分为以下几个方面来介绍 Next.js 实现 SSR 的过程。

安装 Next.js

在开始使用 Next.js 创建第一个应用程序之前,必须先安装 Next.js。可以通过以下命令安装:

创建 Next.js 应用程序

使用以下命令创建 Next.js 应用程序:

执行此命令后,您将被要求输入应用程序的名称,之后 Next.js 将自动生成应用程序的基本骨架。

创建页面

接下来,您可以在 Next.js 应用程序中创建页面。在 pages 目录下,以 “.js” 文件类型的文件将成为 Next.js 网站中的路由。也就是说,如果您创建了一个名为“about.js”的文件,则可以通过 “/about” 访问该页面。

这里我们以一个简单的“index.js”页面为例,以下是基本的代码:

在 Next.js 应用程序中,Home 组件即为我们创建的页面。

在 Next.js 应用程序中使用数据

为了展示如何在 Next.js 应用程序中使用数据,我们将创建一个简单的 API 来返回数据。我们可以在 pages/api 目录下创建一个 JSON 文件。以下是示例 API 的代码:

在我们的页面中,我们可以将我们创建的 API 轻松地与服务器端或客户端 JS 代码进行交互。以下是示例页面的代码:

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

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

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

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

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

在此页面中,我们首先显示在服务器端呈现的文本。然后,当用户单击“从 API 加载”时,我们的 React 应用程序将从我们的 API 中加载数据。其中,getServerSideProps 函数是 Next.js 中用于运行服务器端代码来提取数据并将其传递给页面的函数。

在 Next.js 中使用 CSS

在 Next.js 应用程序中,可以轻松地使用 CSS 和其他样式设计。 下面是一个示例的 CSS 文件:

可以将样式问在页面中,或者您也可以使用 CSS 模块(CSS Modules)或其他任何样式 SDK 管理您的样式。

在 Next.js 中使用路由

如果您已经创建了多个页面,并且想要在 Next.js 中定义页面之间的路由,则可以使用 Next.js 提供的内置路由器。以下是示例路由的代码:

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

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

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

在此页面中,我们可以使用“Link”组件并指定要路由到的页面和链接文本。

总结

本文详细介绍了 SSR 和 CSR 的区别以及使用 Next.js 实现 SSR 的过程。通过使用 Next.js,我们可以轻松地创建支持服务器端渲染的 React 应用程序。如需深入了解 Next.js,请访问官方文档。

参考资料

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fd5bb695b1f8cacdcd29e6

纠错
反馈