要約: Reactをサーバサイドで使うときも、クライアントサイドのように圧縮(code eliminate)しないと遅いよ
Reactはdev向けのコードを大量に含んでいる。
これはprocess.env.NODE_ENV !== 'production'
の時実行されるassertや警告などが主となりproductionには必要ない。
そのため、process.env.NODE_ENV = 'production'
をしないとかなり不利な結果を得る。
I tend to agree that "compiling server side code with webpack to remove access to process" is not what Node developers would typically do, and likely many React users are not even aware of this possibility. So the current results are probably more representative of React SSR perf in the wild. However, it can also be a bit unfair to not show React's perf with full optimization.
サーバサイドもprocess.env.NODE_ENV === 'production'
でuglifyしてdead codeを消し去ったReactを使うことでデバッグ情報がないものとなる。
Reactが公式で配っているbundle済みのもの(min.js)を使うのが手早い。
- webpackのaliasでproduction build時に差し替える
- Server rendering is slower with npm react · Issue #812 · facebook/react
- Hoist DEV's process.env use out of hot code. by STRML · Pull Request #86 · facebook/fbjs
将来的には、Reactはdevとprodのbundleをそれぞれ配布しREACT_ENV
でどちらを使うか設定出来るようになるかも とのこと。
(NODE_ENV
も引き続き見る感じ)