介绍

我正在我的业务中使用 Next.js x Laravel 开发一个应用程序,其中我在 Next.js 中使用了 CSR、SSG 和 SSR。
由于有机会再次思考这些是影响部署方法的深刻的东西,我将总结以下我在本文中学到的东西。

①关于CSR,SSG,SSR
② 关于Next.js的两种部署方式
(部署流程,每种部署方式可以使用什么CSR、SSG、SSR,需要什么样的环境)

*这是我自己研究的总结,但我打算接触实际在业务中使用的know-how,所以我想补充我将来通过实际操作学到的东西。

①关于CSR/SSG/SSR

CSR(客户端渲染)

概述

当有来自浏览器的请求时从服务器

・几乎是空的HTML
CSS
・内置JavaScript

作为响应返回。

在那之后浏览器端然后使用HTML,CSS,JavaScript 为用户呈现 HTML。

优点(相比SSG、SSR,不是普通的静态页面)

  • 对于不关心 SEO、数据更新频繁、不需要静态预渲染(pre-rendered)的页面很有用。

  • 易于部署。 (只要静态托管是可能的)

过失

  • 由于 JavaScript 是发送到客户端的,所以当应用程序变大时,JavaScript 的数量就会变大,渲染所需的时间,即直到页面显示出来的时间也会增加。

  • 此时的显示时间取决于用户使用的设备的处理能力和通信环境。

评论

  • Next.js 文档指出,如果您不需要预渲染数据,建议在客户端获取数据这是

getServerSideProps仅在您需要预渲染需要根据请求获取数据的页面时使用。由于服务器必须计算每个请求的结果,到第一个字节的时间 (TTFB)很长,结果只能由 CDN 使用标头缓存(可能需要额外配置)。

如果您不需要预渲染数据,客户端您应该考虑使用
数据获取:getServerSideProps | Next.js

  • 还建议使用SWR 库进行客户端数据获取。

Next.js 背后的团队是驻波比我创建了一个用于获取数据的 React hooks 库。如果要在客户端获取数据,请使用此我强烈推荐它。
数据获取:客户端 | Next.js

固态硬盘(服务器端渲染)

概述

当有来自浏览器的请求时,在服务器端动态生成 HTML 并将渲染的 HTML 作为响应返回。

换句话说,页面逻辑和渲染是在 CSR 中的客户端(浏览器)上完成的,而在 SSR 中,它在 Node.js 的服务器上运行。

这可以弥补上述企业社会责任的缺点。

优点

  • 与企业社会责任相比

避免了向客户端发送大量 JavaScript 的问题。 (与用户环境无关)

在浏览器中接收呈现的 HTML所以它在搜索引擎优化方面也很强大。

  • 与 SSG 相比

它可以处理数据的频繁更新。

过失

  • 部署需要一个可以执行**SSR**的环境(Node.js)。

  • 由于对于来自用户的每个请求都在服务器端进行计算,因此服务器端可能会变得很重。

SSG(静态站点生成器)

概述

部署时(在构建时),提前渲染并生成嵌入必要数据的 HTML。

当有来自用户的请求时,已经生成的 HTML 作为来自服务器的响应返回。

优点

  • 与CSR和SSR不同,渲染不是根据用户的要求在现场进行的,所以性能很好。

  • 易于部署。 (您只需要静态托管)

过失

  • 在网页上反映数据更新需要重建因此,它不适合更新频繁的网站。

评论

与每次用户请求时从应用服务器返回预先生成的 HTML 不同,将 HTML 文件缓存放置在 CDN 上并从靠近每个用户的 CDN 返回该缓存可以更有效地使用 SSG。

* Vercel 默认有一个名为 Vercel Edge Network 的 CDN。

(2)Next.js的两种部署方式

部署 Next.js 创建的应用程序有两种方法。

(1)部署到SSR环境(Node.js)
(2)静态输出静态文件和主机

(1)部署到 SSR 环境 (Node.js)

Next.js 文档指出

・Vercel(官方推荐)
・Node.js 服务器
・码头工人形象

介绍了三种方法。

部署过程

粗略总结下Next.js官方文档中描述的三种方法。

[对于维塞尔]

  1. 将源代码部署到 Vercel。
  2. Vercel 自动检测 Next.js,执行next build,并进行部署。

    [对于 Node.js 服务器]

    1. 将源代码部署到服务器并运行next build
      (这会优化 HTML、CSS 和 JS 并将它们输出到 .next 文件夹。)

      2、执行next start启动Node.js服务器。

      [对于 Docker 映像]

      1. 准备一个 Dockerfile。

      2. 构建 Docker 映像。 (此时指示Dockerfile执行next build

      3. 部署到可以部署容器的环境,启动容器。

        关于需要部署的文件

        官方文档中介绍的上述过程似乎部署了所有 Next.js 源代码。

        但是,由于.next是通过运行next build创建的针对部署优化的目录,所以实际部署只需要以下文件,不需要部署所有的源代码,可想而知。

        .next
        node_modules
        package.json
        (・.env) *如果浏览器端没有使用环境变量,则不需要。
        (・public) *如果部署不需要图像,则不需要。

        (当我通过在已经部署在 Node.js 环境中的应用程序中仅部署上述文件和文件夹来检查操作时,它可以正常工作。)

        为了尽可能降低风险,我认为最好只在服务器上部署必要的文件,但我没有接触到实际使用的know-how,所以我想知道各个公司是如何操作的. 我想知道......

        你可以做什么

        企业社会责任,SSG,SSR你可以做任何

        *我想说“您可以充分利用Next.js的功能”,但本文不涉及它。中断服务(增量静态再生)全力支持截至 2022 年 3 月 29 日,只有 VercelNetlify 正在这样做。
        (可以部署在其他托管服务上,但是不支持吗?我这里学习还欠缺。)

        关于部署环境

        总之,你需要一个Node.js的执行环境,但具体一点,

        • Vercel
        • Node.js服务器
        • 可以部署容器的环境(部署Node.js容器)

        这意味着有三种方式。

        Vercel 被省略,因为它是相同的。

        • Node.js 服务器

        Next.js 文档说:

        Next.js 可以部署在任何支持 Node.js 的托管服务提供商上。例如,AWSEC2或者数字海洋水滴是。
        部署 | Next.js

        • 可以部署容器的环境

        这也是从 Next.js 文档中引用的。

        Next.js 是 Docker您可以部署到任何支持容器的托管服务提供商。这种方法Kubernetes或者HashiCorp Nomad它可以在部署到容器编排器时使用,例如,或在任何云提供商的单个节点内运行。
        部署 | Next.js

        (2) 静态托管

        Next.js 文档说:

        next exportNext.js 您可以将应用程序导出为静态 HTML。这可以独立运行而无需 Node.js 服务器。
        我是高级功能:静态 HTML 导出 | Next.js

        部署过程

        所需步骤如下。

        1. next build 之后执行next export 生成.out 目录

        2. .out 目录部署到具有静态托管的服务器

          *通过下面文章中的方法,可以很方便的查看静态HTML在本地环境下的运行情况。

          Next.js 静态站点生成 (SSG) 的确认 - Waku Waku 银行

          如何使用 Next.js 在本地检查静态 HTML 导出的应用程序 - Qiita

          你可以做什么

          CSR,SSG,SSR,企业社会责任什么时候SSG也可以与静态托管一起使用。

          不允许 SSR.

          部署环境

          您所需要的只是静态托管。

          当我阅读各种部署文章时,具体使用了以下平台。

          ・网络化
          ・AWS Amplify 控制台
          ・火力基地托管
          ・GitHub页面
          ・亚马逊S3

          最后

          如果你再次阅读 Next.js 文档,

          如果您不需要预渲染数据,请执行 CSR 而不是 SSR

          ・使用名为 SWR 的库在客户端获取数据

          有些事情我不知道,比如被推荐。

          ・如果您不使用 SSR,您可以使用仅具有静态托管功能的 Web 服务器进行部署。

          ・Next.js 还推荐 CSR 而不是 SSR,除非是最低要求

          考虑到这一点,我认为选择使用 SSR 的情况会少得多。

          我了解到CSR/SSG/SSR之间的区别仅仅是在客户端渲染还是在服务器端渲染,不仅仅是性能方面,还有如何部署以及随之而来的运营成本,我想继续研究。

          参考文章


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308629801.html

相关文章:

  • 2021-07-21
  • 2021-09-14
  • 2022-12-23
  • 2022-12-23
  • 2021-11-13
  • 2021-04-23
  • 2021-09-29
  • 2021-12-18
猜你喜欢
  • 2021-06-03
  • 2021-05-09
  • 2021-12-17
  • 2021-10-17
  • 2022-12-23
  • 2022-12-23
  • 2021-11-15
相关资源
相似解决方案