详解超简单的react服务器渲染(ssr)入坑指南

我来为你详细讲解“详解超简单的react服务器渲染(ssr)入坑指南”的完整攻略。

我来为你详细讲解“详解超简单的react服务器渲染(ssr)入坑指南”的完整攻略。

什么是SSR

SSR(Server-Side Rendering,服务器端渲染)是指在服务器端使用Node.js等技术来进行React组件的渲染工作,将页面渲染成HTML字符串后返回给浏览器,使浏览器能够更快速地呈现页面,提升用户体验。

SSR的优劣

相比于客户端渲染(CSR),SSR的优势体现在以下几个方面:

  • 更好的SEO:由于搜索引擎抓取网页的原理是采用爬虫,爬虫只会抓取HTML文件中的内容,而采用CSR架构的React应用在初次加载页面时只返回一个空白的HTML和空的JavaScript文件,这对于搜索引擎来说就显得非常不友好,相反的,采用SSR架构的React应用则可以首次返回一个完整的HTML结构,使得搜索引擎更容易理解和抓取网站的内容。
  • 更快更流畅的用户体验:由于首屏HTML文件的内容已经被返回,所以用户不必等待第一次JavaScript渲染结束才能看到内容,同时后续的页面切换也更加流畅。
  • 更好的跨平台兼容:SSR不需要依赖于特定的JavaScript运行环境,可以与浏览器以及其他JavaScript运行环境兼容。

不过,SSR也有不足之处,主要表现在以下几个方面:

  • 服务器压力较大:SSR需要在服务端处理React组件的渲染,因此会增加服务器的负载压力,特别是在高并发情况下。
  • 开发调试不方便:由于 SSR 与每个单独的请求都有关,因此对于开发人员而言,调试相对于客户端渲染来说是有一定难度的。

如何实现SSR

实现SSR的方式比较多样,常见的工具和框架有:

  • Next.js
  • Nuxt.js
  • React-Static

这些工具和框架都有各自的使用场景和特点,请按需选择使用。

下面将给出一个超简单的React服务器渲染的入门模板。

创建项目

创建一个新的空目录,使用npm初始化项目:

mkdir my-react-ssr-app
cd my-react-ssr-app
npm init -y

安装react和react-dom

使用npm安装react和react-dom:

npm install react react-dom

安装webpack和webpack-cli

webpack是一个现代JavaScript应用程序的模块打包器,我们使用它将前端代码打包成浏览器可识别的代码。

npm install webpack webpack-cli

安装webpack-node-externals

为了让我们的SSR应用程序能够正确运行,我们需要将所有node_modules中的依赖都写入到bundle文件中。但这么做会使我们的bundle文件过大,我们可以使用webpack-node-externals来排除它们。

npm install webpack-node-externals

创建webpack配置文件

在项目根目录下,创建一个webpack.config.js文件,添加以下代码:

const path = require('path');
const nodeExternals = require('webpack-node-externals');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, '..', 'dist'),
    filename: 'server.js'
  },
  target: 'node',
  externals: [nodeExternals()],
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      }
    ]
  }
};

这个配置文件告诉webpack我们要打包的源代码在src/index.js文件中,在dist目录下生成一个名为server.js的输出文件。我们使用babel-loader对.js文件进行转换,排除node_modules下的文件,同时排除外部依赖。

创建Babel配置文件

在项目根目录下,创建一个.babelrc文件,添加以下代码:

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ]
}

这个文件告诉babel我们使用@babel/preset-env@babel/preset-react两个预设进行转换。

创建应用入口

在项目根目录下,创建一个src/index.js文件,添加以下代码:

import React from 'react';
import { renderToString } from 'react-dom/server';

const App = () => (
  <div>
    <h1>Hello SSR!</h1>
  </div>
);

const html = renderToString(<App />);

console.log(html);

这个文件导入了React和ReactDOM的server模块,我们实现了一个简单的React组件,并使用renderToString方法将其渲染为HTML字符串。

打包应用程序

在命令行中执行以下命令,打包我们的应用程序:

npx webpack

运行应用程序

打包后我们可以运行应用程序了。首先在dist目录下新建一个index.js文件,添加以下代码:

require('./server');

然后,在命令行中执行以下命令,启动我们的服务器:

node ./dist/index.js

访问http://localhost:3000,你应该能够看到一个简单的页面。

我们也可以通过在src/index.js文件中使用ReactDOM.hydrate()方法进行客户端渲染,实现全面的SSR应用程序。

至此,我们便实现了一个简单的React服务器渲染应用程序。

示例1:使用Next.js搭建SSR应用

除了自己手动搭建外,我们可以使用Next.js这个React框架来快速实现一个SSR应用程序。Next.js使用约定优于配置的方式进行开发,因此我们不需要进行过多的配置。

使用create-next-app脚手架创建项目:

npx create-next-app my-next-ssr-app

创建完毕后,在命令行中进入项目目录:

cd my-next-ssr-app

我们可以先尝试在客户端进行渲染:

npm run dev

访问http://localhost:3000,你应该能够看到一个简单的页面。

然后,我们尝试将其进行SSR渲染:

pages/index.js中加入以下代码:

export default function Home() {
  return (
    <div>
      <h1>Hello SSR from Next.js!</h1>
    </div>
  );
}

export async function getServerSideProps() {
  return {
    props: {}
  };
}

这个函数是Next.js框架定义的用于导出在SSR时需要渲染的组件和数据的函数。我们在其中导出了一个简单的组件和一个空的props对象。

在命令行中运行:

npm run build
npm run start

访问http://localhost:3000,你应该能够看到SSR后的页面。

示例2:使用React-Static搭建SSR应用

React-Static是一个基于React的静态站点生成器,它使用Webpack和Babel实现了服务器端渲染,因此也可以用于构建React SSR应用程序。

使用React-Static官方提供的脚手架创建项目:

npx create-react-static my-static-ssr-app

创建完毕后,在命令行中进入项目目录:

cd my-static-ssr-app

然后,在src/App.js中加入以下代码:

import React from 'react';

export default () => (
  <div>
    <h1>Hello SSR from React-Static!</h1>
  </div>
);

最后,再运行以下命令:

npm run build
npm run serve

访问http://localhost:3000,你应该能够看到一个SSR后的页面。

至此,我们介绍了SSR的基本概念、优劣以及实现方式,同时也给出了手动搭建和使用现成框架和工具搭建SSR应用的示例。希望这篇文章能够帮助你入门SSR,踏上React SSR之路。

本文标题为:详解超简单的react服务器渲染(ssr)入坑指南

基础教程推荐