webpack 实现 SSR 打包
服务端渲染(SSR)是什么
- 渲染:HTML + CSS + JS + DATA => 渲染后的 HTML
服务端
- 所有模板等资源都存储在服务端
- 内网机器拉取数据更快(优势)
- 一个 HTML 返回所有数据
客户端渲染 | 服务端渲染 | |
---|---|---|
请求 | 多个请求(HTML,数据等) | 1个请求 |
加载过程 | HTML & 数据串行加载 | 1个请求返回 HTML & 数据 |
渲染 | 前端渲染 | 服务端渲染 |
可交互 | 图片等静态资源加载完成,JS 逻辑执行完成可交互 | 两端一样 |
优势
- 减少白屏时间
- 对于 SEO 友好
打包存在的问题
- 浏览器的全局变量(Node.js 中没有 window,document)
- 组件适配:将不兼容的组件根据打包环境进行适配
- 请求适配:推荐使用
axios
- 样式问题(Node.js 无法解析 css)
- 服务端打包通过
ignore-loader
忽略掉css
的解析 - 将
style-loader
替换成isomorphic-style-loader
- 使用打包出来的浏览器端 html 为模板
- 设置占位符,动态插入组件
- 服务端打包通过