PM2 与 React 服务器端渲染技术的实现

阅读时长 12 分钟读完

当我们构建一个 React 应用时,通常会使用客户端渲染来呈现应用程序。这种方式对于静态内容和响应式设计来说是非常优秀的,但是当应用程序不稳定或者需要一些优化时,服务器端渲染就显得尤为重要。

PM2 是一个流行的 Node.js 进程管理器,可以用来启动多个 Node.js 进程并且自动重启进程以保证应用程序的稳定性和持续性。

在本文中,我们将介绍如何使用 PM2 和 React 服务器端渲染技术来构建一个更加稳定和高效的 React 应用程序。

什么是 React 服务器端渲染?

React 服务器端渲染是指在服务器端生成 HTML,然后将其发送到浏览器中呈现给用户的过程。

这种方式相当于把 React 代码放到服务器端去执行,然后将完整的 HTML 页面返回给用户,而不是通过浏览器执行 JavaScript 代码来生成 HTML。

使用服务器端渲染可以提高性能和速度,尤其是在首次渲染时。同时,服务器端渲染还可以优化搜索引擎优化,因为搜索引擎可以更好地理解和索引标记。

为什么需要 PM2?

PM2 进程管理器在很多情况下都会显得非常有用。它可以启动和监控多个 Node.js 进程,处理进程退出、崩溃等故障。它还包含了日志记录和监控功能,这些都是构建稳定的应用程序所必需的。

另外,使用 PM2 可以轻松地完成集群化和负载均衡,可以部署多个 Node.js 进程来处理大量的请求流量,确保应用程序运行稳定。

实现 PM2 和 React 服务器端渲染

下面我们来具体实现如何使用 PM2 和 React 服务器端渲染来构建一个更加稳定和高效的 React 应用程序。

步骤一:安装依赖

首先,在项目根目录下执行以下命令安装依赖:

其中, express 是我们用来在服务器端呈现 React 应用程序的框架。reactreact-dom 是 React 库,而 react-router-dom 则是用来在服务器端渲染 React 路由的库。

nodemon 是一个非常有用的 Node.js 开发工具,它可以在代码发生变化时自动重启 Node.js 服务。而 pm2 则是进程管理器,我们将在下面的步骤中使用它来启动和监控应用程序的多个进程。

步骤二:创建服务器

在项目根目录中新建一个 server.js 文件,编写以下代码:

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

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

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

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

这里我们创建了一个 Express 应用程序,并且使用 express.static 中间件来提供静态资源文件。我们还让所有的路由都返回 index.html 文件,因为这个文件包含了我们的 React 应用程序。

在接下来的步骤中,我们将在 index.html 中添加一些代码来链接到我们的 React 应用程序。

步骤三:创建 React 应用程序

首先,在项目根目录下创建一个 src 目录,并在其中新建一个名为 App.js 的 React 组件,具体代码如下:

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

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

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

这里我们定义了四个路由,其中 / 路由指向 Home 组件,/about 路由指向 About 组件,/contact 路由指向 Contact 组件,其他路由则指向 NotFound 组件。

接下来,在 src 目录中创建一个 Home.js 组件,代码如下:

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

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

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

这里我们简单地呈现了一个欢迎语句和一个描述。

同样地,在 src 目录下创建一个 About.js 组件和一个 Contact.js 组件,代码分别如下:

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

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

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

最后,在 src 目录下创建一个 NotFound.js 组件,用于处理无法匹配到路由的情况。

步骤四:创建 react-dom/server 渲染器

我们需要创建一个 serverRenderer.js 文件,以便在服务器端渲染 React 组件。

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

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

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

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

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

在此代码块中,我们使用了 renderToString 方法,将 React 应用程序渲染成字符串,然后将其插入到 HTML 中,并添加了一个 script 标记来引用构建后的 bundle.js 文件。

步骤五:编写启动脚本

在项目根目录下新建一个 pm2.config.js 文件,内容如下:

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

我们在这里定义了一个名为 my-app 的进程,运行 index.js 文件,并将其标记为需要监控。

那么我们如何编写 index.js 文件呢?在项目根目录下创建一个 index.js 文件,编写以下代码:

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

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

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

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

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

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

在此文件中,我们引入了 serverRenderer.js 文件中的 serverRenderer 方法作为我们的中间件。

步骤六:编写 npm scripts

package.json 文件中编写以下脚本:

这里我们定义了三个脚本:

  • dev:开发模式,启动一个 Node.js 服务并使用 nodemon 重启 Node.js 服务。
  • build:构建生产环境的代码。
  • start:启动生产环境的 Node.js 服务。

步骤七:构建代码

在项目根目录下新建一个 webpack.config.js 文件,配置内容如下:

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

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

注意:这里我们在 output 对象中指定了 public 作为路径,而不是 dist 或者 build。使用 public 目录是因为我们已经在 server.js 中配置了 Express 应用程序的静态资源,使用 public 目录是为了更加一致。

现在,在项目根目录下执行以下命令来编译 React 应用程序的 JavaScript:

步骤八:启动应用程序

在命令行中启动应用程序:

现在,你的 React 应用程序已经通过 PM2 服务器端渲染技术实现了。你可以在浏览器中输入 http://localhost:3000 来测试它是否正确地工作。

总结

本文我们介绍了如何使用 PM2 和 React 服务器端渲染技术来构建一个更加稳定和高效的 React 应用程序。使用 PM2 进程管理器,我们可以轻松地启动和监控多个 Node.js 进程,处理进程退出、崩溃等故障,确保应用程序运行稳定。

React 服务器端渲染可以提高性能和速度,尤其是在首次渲染时。同时,服务器端渲染还可以优化搜索引擎优化,因为搜索引擎可以更好地理解和索引标记。

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

纠错
反馈