SSR相关

126 阅读2分钟

SSR

什么是服务端渲染(SSR)?

服务端渲染是指在服务器上生成HTML页面,然后将这些页面发送到客户端。这种方法可以加快首屏加载时间,改善SEO(搜索引擎优化),并且对于一些需要快速响应的应用场景非常有用。

style 处理

1)使用style对象的_getCss获取组件样式源代码并保存在context上

2)服务端打包使用isomorphic-style-loader插件将s样式插入到html中

hydrated

在React中,hydrate 函数是一个用于将服务端渲染(SSR)的内容与客户端React组件进行连接的过程。这个过程通常在React 16及更高版本中使用,特别是在使用像ReactDOMServer这样的库进行服务器端渲染时非常有用。

React的hydrate原理

在React中,当你使用服务端渲染生成HTML,并将其发送到客户端时,客户端的React应用需要“hydrate”这些静态的HTML。这意味着React组件需要接管这些已经存在的DOM元素,并将其转换为动态的React组件。

步骤说明:

  1. 服务器渲染:服务器使用ReactDOMServer.renderToStringReactDOMServer.renderToStaticMarkup方法生成HTML。
  2. 发送到客户端:生成的HTML发送到客户端浏览器。
  3. 客户端hydrate:在客户端,React使用ReactDOM.hydrate函数来附加事件监听器到这些静态的HTML元素上。这样,当用户与页面交互时(例如点击按钮),React能够像在单页应用(SPA)中那样响应这些事件。

示例代码:

服务器端(Node.js)

import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from './App'; // 你的React组件
 
const html = ReactDOMServer.renderToString(<App />);

客户端

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App'; // 你的React组件
 
ReactDOM.hydrate(<App />, document.getElementById('root'));

为什么使用hydrate?

  • 性能:由于DOM已经由服务器预先构建,因此客户端只需要“附加”事件监听器即可,这比从头开始构建DOM要快得多。
  • 用户体验:由于首屏内容几乎是即时的(因为大部分工作已经在服务器上完成),用户可以更快地看到内容,从而提高用户体验。
  • SEO:搜索引擎可以直接抓取渲染好的HTML,这对于SEO非常有利。

注意事项

  • 确保服务器生成的HTML与客户端的React代码完全一致,包括所有的props和state。任何细微的差异都可能导致hydration失败。
  • 使用hydrate而不是render来避免不必要的警告和潜在的问题。hydrate是专门为SSR设计的。

通过这种方式,React能够在保持快速首屏加载和良好用户体验的同时,利用服务端渲染的优势。