聊聊服务端渲染的各种姿势
流程:下载空 HTML -> 下载 JS -> 执行 JS -> 渲染 DOM
流程:服务器运行 React -> 生成 HTML -> 浏览器显示 -> 下载 JS -> 水合(绑定事件)
流程:构建时生成所有 HTML -> 用户访问直接返回(像 Nginx 托管静态文件)
Next.js 提出的方案。
流程:构建时先生成静态页 -> 设置有效期(如 60s)-> 过期后第一个请求触发后台重新生成 -> 覆盖旧缓存
服务端生成的 HTML 必须和客户端首次渲染结果完全一致。
如果不一致(如 Date.now()),React 会报警告并强制回退到 CSR。
服务端没有 window / document,使用前必须判断:
| 模式 | 速度 | 实时性 | 适合场景 |
|---|---|---|---|
| CSR | 慢(首屏) | 最实时 | 后台系统 |
| SSR | 快 | 实时 | Feed 流 |
| SSG | 最快 | 无实时 | 文档、博客 |
| ISR | 快 | 一般 | 电商详情页 |