资源列表:
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
组件式开发的优势:高复用、低耦合 - 前后端维护一套代码(代码同构)