SSR

作者: monkeyfly36 | 来源:发表于2020-12-30 17:05 被阅读0次

CSR(Client-Side-Rendering,客户器端渲染)
SSR(Server-Side-Rendering,服务器端渲染)

同构:前后端都可以使用同一套代码生成页面,页面既可以由前端动态生成,又可以由服务器直接渲染出来

用一个现实生活的例子来看:假如从超市买东西吃,以SSR的角度来看,你每次在超市买完随即吃完再走,每次饿了都需要出发去超市。而从CSR的角度来看,就是你从超市购买许多原材料再拿回家去自己煮,多了能放冰箱,这样每次肚子饿了就不需要每次都往超市跑,唯一麻烦一点在于你得花时间挑选食材。

简而言之,SSR强在首屏渲染;而CSR强在用户和页面多交互的场景
image.png image.png image.png

简单的react ssr
react-dom提供了server的渲染api--renderToString,负责把react组件解析成html (这里比vue ssr多了一个环节,因为node是不支持jsx的,所以需要babel支持)
注:a.针对服务端的渲染代码,可以剔除node_modules,大幅减少服务端代码生成耗时; b.使用babel-loader,在node层解析jsx。

react store -- redux/mobx/diva
纯函数:返回结果只依赖传入参数,不受外部影响

异步数据
client: didMount -> axios
server: 数据 -> 初始化store

组件中的异步数据如何在服务端首屏中加载出来:
compoment -> didMount(访问数据库) -> store ->props

一个页面多个组件组成,一个组件请求报错,如何单独处理?
Promise.all有问题?
-> 1.promise包装,在catch里仍然resolve --> (进行降级处理)
-> 2.Promise.allSettled

如何取消浏览器跨域访问数据,使所有数据都从服务端ssr那边请求?
统一axios
!!!! http-proxy-middleware

解决favicon.ico问题?在public目录下放favicon.ico

同构css--解决node层使用document进行css操作
npm install isomorphic-style-loader --save-dev

!!!ssr造成服务端压力过大?-->降级渲染
路由参数,全局配置开关开启csr,请求接口的报错,cpu或者内存占用率提升--> 开启csr

课程坑:
18-- import { createProxyMiddleware } from 'http-proxy-middleware'
25 -- css-loader 需要降级1.0.1,不然styles._getCss()打印出来是[object module]

ssr 两种实现
1.同构 -- server
js--renderToString
css-isomorphic-style-loader
loadData
首页异步请求,处理promise.all报错
放弃seo的降级渲染(流量大)--csrRender() - index.spa.html;
高阶组件,css细节优化withStyle--hoist-non-react-statics
2.其他ssr实现,NodeServer 设置 --- puppeteer

prerender
next.js

zy:使用next.js+antd+redux 实现类似https://e.xitu.io
1.查看网页使用的接口(用掘金的接口即可)
2.支持左侧掘金热文,右侧github trending
3.支持切换(前端后端等)

相关文章

网友评论

      本文标题:SSR

      本文链接:https://www.haomeiwen.com/subject/ohzsnktx.html