LoginSignup
4
3

More than 5 years have passed since last update.

React Profilerを試してみる

Posted at

要旨

React v16.5から入ったReact Profilerをちょろっと試してみました。

ざっくりとした説明

  • React DevToolsにProfilerタブが追加された
  • プロファイリングを開始すると、コンポーネントがレンダリングされるたびに情報を収集する
  • プロファイリングを停止すると、コミットごとにレンダリング時間、props、stateを表示してくれる
  • interactionとコミットを紐付けて可視化することもできる

前提条件

  • React v16.5.0+
  • React Developer Tools v3.3.2+

動作

デモ

  • 同期カウンター
  • 非同期カウンター
  • レンダリング速度が遅くなるとき

の3つの例を確認できるデモを作ってみました。

同期カウンター/非同期カウンター

プロファイリングしながら、同期カウンター/非同期カウンターをそれぞれ押してみます。
Screen_Shot_2018-09-20_at_18_36_25.png
Screen_Shot_2018-09-20_at_18_36_38.png

2つのコミットが記録されてますね!

interactionを確認してみると、
Screen_Shot_2018-09-20_at_18_37_15.png
同期と非同期のボタンを押した時にそれぞれ記録されています!
非同期のほうは2秒タイムアウトを入れてるので、そのぶんバーが伸びています。
また、■をクリックすると、interactionに紐づいているコミットに飛ぶことができます。

レンダリング速度が遅くなるとき

プロファイリングしながら、テキストボックスの値をだんだんと増やしてみます。
最初のコミットではあまり時間がかかっていませんが、
Screen Shot 2018-09-20 at 18.38.33.png
値が増えると遅くなることがわかります。
Screen Shot 2018-09-20 at 18.38.49.png
Screen Shot 2018-09-20 at 18.39.19.png
閾値を設定して時間のかかってるコミットだけを表示することもできます。

思ったこと

  • interactionをactionに仕込むのは有用そう
    • production環境だとinteractionは表示されないらしい
    • redux-loggerとか使ってるとあまり魅力に感じないかも
    • interaction周りは後にブログに書かれるみたいです
    • 現状、unstableなのでAPI周りは大いに変わりうる
  • Elementsで選択した親コンポーネントに紐づく子要素だけを表示してくれて便利
  • かかってる秒数で絞り込んでボトルネックを探していけて便利

まとめ

interactionは自分で仕込まないといけないけど、
プロファイリングだけならReactのversionあげればいいだけなので、お手軽。

関連Doc

4
3
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
4
3