资源列表:
Git仓库: koa2-react-isomorphic-boilerplate
Webpack工程化解决方案easywebpack
Egg + React + React Router + Redux 服务端渲染实践
Egg + React 服务端渲染开发指南
服务端渲染与 Universal React App
React服务器端渲染实践小结
React 服务端渲染理论
相关的知识点:
- 了解服务端渲染解决的问题
- 了解服务端渲染的基本原理
- 使用现有框架实现服务端渲染
- 进阶,dva+egg框架实现服务端渲染
- 进行性能测试
客户端渲染、服务端渲染、同构的区别
客户端渲染:页面在
JavaScript,CSS等资源文件加载完毕后开始渲染,路由为客户端路由,也就是我们经常谈到的SPA(Single Page Application)。服务端渲染:页面由服务端直接返回给浏览器,路由为服务端路由,
URL的变更会刷新页面,原理与ASP,PHP等传统后端框架类似。同构:英文表述为
Isomorphic或Universal,即编写的JavaScript代码可同时运行在浏览器及Node.js两套环境中,用服务端渲染来提升首屏的加载速度,首屏之后的路由由客户端控制,即在用户到达首屏后,整个应用仍是一个SPA。
总的架构

- 服务端预先获取编译好的客户端代码及其他资源。
- 服务端接收到用户的
HTTP请求后,触发服务端的路由分发,将当前请求送至服务端渲染模块处理。 - 服务端渲染模块根据当前请求的
URL初始化memory history及redux store。 - 根据路由获取渲染当前页面所需要的异步请求(
thunk)并获取数据。 - 调用
renderToString方法渲染HTML内容并将初始化完毕的redux store塞入HTML中,供客户端渲染时使用。 - 客户端收到服务端返回的已渲染完毕的
HTML内容并开始同步加载客户端JavaScript,CSS,图片等其他资源。 - 之后的流程与客户端渲染完全相同,客户端初始化
redux store,路由找到当前页面的组件,触发组件的生命周期函数,再次获取数据。唯一不同的是redux store的初始状态将由服务端在HTML中塞入的数据提供,以保证客户端渲染时可以得到与服务端渲染相同的结果。受益于Virtual DOM的diff算法,这里并不会触发一次冗余的客户端渲染。
为什么要采用服务端渲染?
- 利于
SEO - 加速首屏渲染速度
- 享受
React组件式开发的优势:高复用、低耦合 - 前后端维护一套代码(代码同构)