|
今年7月份的时候用umi搭建了react ssr,发现了不少问题,记录一下,作为后来人选型的参考,是真正的从入门到放弃。如果下面罗列的问题你们自己有办法解决,那可以考虑使用,当然,以下仅供参考,可能官方后续会把问题解决。
1、本地开发的时候,每次修改代码,node都会重启,导致服务访问不了,开发效率很低。给官方提了issue,看回复应该是不改了
2、服务端渲染时,如果开启按需加载,会componentDidMount会执行两次,给官方提了issue(https://github.com/umijs/umi/issues/5351),没有看到解决方案,只能关闭按需加载。
3、服务端渲染发现很耗CPU, 单台服务器80左右并发时基本上CPU就被占满了。可能可以通过一些缓存方案解决不过这也挺麻烦的。
以上是影响比较大的问题。下面列一些问题,有一些解决方案,供已经在使用的同学参考。
1、如果在layout层使用了TransitionGroup和CSSTransition做页面跳转动画,会导致getInitialProps执行多次,因为他们渲染了多个实例。只能避免使用这些动画。

2、layout 如下写法导致在测试环境的时候,编译出来的标签嵌套有问题,从而导致样式错乱,但本地没事。解决方法是将{children}改成<div>{children}</div>
<section className={styles.container}>
{children}
<InitLoading isShow={this.state.isShow} />
</section>
3、较久没操作,会出现样式错乱。没找到具体原因,不过只在模拟器上有,真机和浏览器不开模拟器都没出现。
4、按官方的demo 和文档实现ssr,发现meta 没法成功渲染,发现是 react-helmet 不支持stream方式渲染,改成string 就行了,不过发布此文前,看官方的例子好像已经去掉了stream的设置。
5、打包完静态文件下载慢问题,这个是按官网demo通过node实现下载静态文件,当然官方demo已经提示要用Nginx,改成Nginx配置就好。
还有一些现象,算不上问题,不过在编程时会造成一些困扰。
1、当页面切换返回的时候getInitialProps异步操作可能比componentDidMount慢
2、getInitialProps返回的数据,在客户端并没有同步到model中
以上是使用umi 搭建react ssr 发现的问题,仅供大家参考。可能后续官方会将这些问题解决掉。不过其实除了手脚架本身的问题外。react 服务端渲染还有不少本身的问题:
1、两端同时操作cookie较为困难,虽然网上有一些库声称自己可以同时操作两端cookie,但其实服务端是通过一个对象去保存操作cookie数据的,在服务端的操作并没有同步到客户端。
2、编程时同时需要考虑服务端和客户端,可能提升了开发难度,降低了开发效率
3、不少库并不支持服务端渲染,这增加了开发的难度。
4、给服务端带来了不少压力
这是本人经过实践后,对react ssr 的一些思考,希望对大家有用。用umi 做ssr 遇到了不少问题,是真的从入门到放弃。
|