1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

React vs React Static速度対決...したけど、引き分け

Last updated at Posted at 2019-03-30

結論

React製の超シンプルなWEBページを静的サイトジェネレータ「React Static」で静的ページにしたけど、別に速くならなかった:neutral_face:

https://speed-test-react.netlify.com/
https://speed-test-react-static.netlify.com/

背景

コンポーネント指向の書き方が大好きなので、全然状態の変化しないフツーのサイトもReactで書きたくなりました。
ただ、表示が遅くなりそう...
ただ、誰がいつ見ても同じ内容なのに、一々ブラウザのJSでレンダリングしてもらうなんて...

静的サイトジェネレータを使えば、高速表示のままReactで開発できるのでは...? 

やったこと

画像とテキストが並ぶ超シンプルなSP前提のWEBページをReactとReact Staticで作ってみました。
Ajax通信も一切ありません。

React版

https://speed-test-react.netlify.com/
https://github.com/IYA-UFO/speed-test-react

  • React
  • create-react-app
  • styled-components
  • BootStrap4のCSS
  • 合計700KB程度の画像 一部別サーバー

React Static版

https://speed-test-react-static.netlify.com/
https://github.com/IYA-UFO/speed-test-react-static

上記+React Static

比較ツール

パフォーマンス測定超初心者なので、ググりながらやりました。

Chrome devtools ダウンロード速度10MB CPU4倍遅い設定(MacBook Pro)

比較観点

静的ページ、特にマーケティング系のページにとって、重要なのはファーストビューがちゃんと見えるまでの時間です。
それを比べたい、

...いざ、勝負

結果

Chrome devtools Performanceタブ

比較.png

変わらねぇええ!!
画面左端がindex.htmlを取得した瞬間です。これより前の出来事にフロントエンドは関係ありません。
上の波みたいなのがCPUの使用量を示します。
大雑把に以下です。

  • 青 HTMLパース
  • 黄色 JS実行
  • 紫 CSS適用

よく見ると、React側はレンダリング前に50msほどJSの実行時間があります。これが心配していた「遅延」です。
React Staticは、その賢い仕様上、HTML、CSSの処理が終わった後にイベントなどを処理するJSをマウントしています。ただ、今回は活躍の機会はありません。

Chrome devtools Networkタブ

比較2.jpg

ちょっと...違う..?
今回のページにはファーストビューにヒーローイメージ?(320KBのやつ)があるので、その子の表示が体感速度のカギとなります。
React側はmain.jsによるHTML生成が終わるまでヒーローイメージをリクエストできないのに対し、React Staticは最初からMax6本リクエストを出していると思われます。おかげで700msほど?速く落とせています!

見た目

比較3.gif

変わらねぇええ
主題はファーストビューの高速表示でしたが、複数回やれば逆転するレベルで同じです。
React+styled-componentsが裏でこそこそ何しているのかは知りませんが、React Staticは古き良きHTML⇨CSS追加の表示ですね。

結論

超シンプルなReactアプリケーション?を静的ジェネレータにかけても、表示がすごく速くなることはない。

感想

パフォーマンスの測定

dentoolsの表示の2割も理解していません。ブラウザの動きを深く知らないとキビシイ世界のようです。
devtoolsの見方を体系的に学びたい...

静的サイトジェネレータ

今回のReactさんは50msでHTMLを出しましたが、本格的なReactアプリケーションでは数秒かかることも珍しくないと思います。静的サイトでも本格的に運用すれば数十のコンポーネントを使うわけで、そのとき、静的サイトジェネレータの真の力が唸るのかもしれません。

もちろん、CMSからAjaxでデータを取得する場合、ジェネレータによる事前ビルドの効果は明らかでしょう。

おわりに

ブラウザのことよく知らないのに背伸びしました。仮説、間違いのご指摘、なんでも全力で歓迎いたします。
それまで、Reactでいいや

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?