服务端渲染总结问题
谈谈服务端渲染中,遇到的难点?
SSR渲染安全问题
- 数据泄露问题
- 避免将敏感信息暴露在HTML中
- 任何人都可以通过查看源代码看到HTML结构内容
什么页面需要混合渲染?
-
混合渲染是指在同一个页面中,部分内容使用服务端渲染(SSR),部分内容使用客户端渲染(CSR),结合两者的优势
-
系统中涉及到公共的内容数据 → SSR(SEO友好,可缓存)
-
个性化内容 → CSR(性能好,用户体验佳)
-
混合渲染 → 基础内容、 公共内容 SSR + 个性化数据CSR
什么页面不需要服务端渲染?
-
不需要SEO页面
-
交互性强,需要实时数据更新
- 实时数据,服务端渲染没有意义
- 因为首先是服务端渲染,服务端渲染完之后,再发送给客户端,等到客户端渲染时,数据已经过时了
-
用户个性化内容数据,不适合服务端渲染
- 如果使用服务端渲染,那么每个用户个性化数据,都涉及到SSR,造成服务端压力大
什么页面需要服务端渲染?
- 首屏页面, 提高首屏渲染速度
- seo页面,需要搜索引擎抓取内容
ssr阶段获取数据问题
-
注意在ssr服务端渲染阶段,无法获取本地缓存中的数据,比如如果要请求接口数据,请求头相关配置放在了浏览器的本地缓存,比如token放在了本地缓存中, 那么在ssr阶段是无法获取的,需要放在cookie中,cookie在服务端就可以获取到
-
SSR 的 Cookie 读取是从请求头读取,而不是从浏览器读取
-
Cookie 是通过 HTTP 请求头自动携带的
-
在服务端阶段,server 端代码可直接用
req.headers.cookie读取
-
主题切换问题
- 主题切换应该放在用 Cookie 做 SSR 同步,不要放在localStorage
- 刷新页面的时候,是走服务端渲染,是无法读取localStorage的,但是可以读取cookie
- 放在cookie中做主题切换,就可以避免首次渲染/刷新阶段 出现闪烁问题
- 或者在ssr阶段,设置html的属性主题类型,比如data-theme