当我们构建一个 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 应用程序。
步骤一:安装依赖
首先,在项目根目录下执行以下命令安装依赖:
yarn add express react react-dom react-router-dom yarn add -D nodemon yarn add -g pm2
其中, express
是我们用来在服务器端呈现 React 应用程序的框架。react
和 react-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
组件,用于处理无法匹配到路由的情况。
import React from 'react'; const NotFound = () => { return <h1>404 - Page not found</h1>; }; export default NotFound;
步骤四:创建 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
文件中编写以下脚本:
{ "scripts": { "dev": "nodemon index.js", "build": "webpack", "start": "pm2 start pm2.config.js" } }
这里我们定义了三个脚本:
dev
:开发模式,启动一个 Node.js 服务并使用nodemon
重启 Node.js 服务。build
:构建生产环境的代码。start
:启动生产环境的 Node.js 服务。
步骤七:构建代码
在项目根目录下新建一个 webpack.config.js
文件,配置内容如下:
-- -------------------- ---- ------- ----- ---- - ---------------- -------------- - - ----- ------------- ------ ------------------ ------- - --------- ------------ ----- ----------------------- ---------- -- ------- - ------ - - ----- -------------- -------- ----------------- ---- - ------- --------------- -------- - -------- --------------------- ----------------------- -- -- -- -- -- -------- - ----------- ------- -------- -- --
注意:这里我们在 output
对象中指定了 public
作为路径,而不是 dist
或者 build
。使用 public
目录是因为我们已经在 server.js
中配置了 Express 应用程序的静态资源,使用 public
目录是为了更加一致。
现在,在项目根目录下执行以下命令来编译 React 应用程序的 JavaScript:
yarn build
步骤八:启动应用程序
在命令行中启动应用程序:
yarn start
现在,你的 React 应用程序已经通过 PM2 服务器端渲染技术实现了。你可以在浏览器中输入 http://localhost:3000
来测试它是否正确地工作。
总结
本文我们介绍了如何使用 PM2 和 React 服务器端渲染技术来构建一个更加稳定和高效的 React 应用程序。使用 PM2 进程管理器,我们可以轻松地启动和监控多个 Node.js 进程,处理进程退出、崩溃等故障,确保应用程序运行稳定。
React 服务器端渲染可以提高性能和速度,尤其是在首次渲染时。同时,服务器端渲染还可以优化搜索引擎优化,因为搜索引擎可以更好地理解和索引标记。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646eb4d1968c7c53b0d0a047