React: 調整パフォーマンス関数とクラスコンポーネント

作成日 2019年07月11日  ·  3コメント  ·  ソース: facebook/react

機能をリクエストしバグを報告しますか?
どちらでもない/バグ

現在の動作は何ですか?
クラスコンポーネントを(フックを使用して)関数コンポーネントに移行しているときに、パフォーマンスことに気付きました。 ツリー構造の一部であるコンポーネント( TreeNodeComponentと呼ばれる)があります。 ツリーのサイズによっては、何百ものインスタンスが表示される場合があります。

関数コンポーネントをPureComponentでラップすると、観察される「レンダリング時間」が大幅に短縮されました。 (〜160msから〜60ms)

Chrome開発ツールで観察される「レンダリング時間」

Bildschirmfoto 2019-07-11 um 16 24 10

環境:

アプリは、これらのTreeNodeComponenttree-structureレンダリングします。 親が更新されると、すべての直接の子を調整する必要があります。
プロジェクト: https

期待される動作は何ですか?
機能コンポーネントとクラスコンポーネント間の同等のパフォーマンス。

Reactのどのバージョン、およびどのブラウザ/ OSがこの問題の影響を受けますか?

OSX
クロム73 /エレクトロン5.0.5
React 16.8
Typescript&Webpack

最も参考になるコメント

関数コンポーネントをPureComponentでラップすると、観察される「レンダリング時間」が大幅に短縮されました。 (〜160msから〜60ms)

TreeNodeComponentレンダリングにReact.PureComponent早期にベイルアウトします。

クラスコンポーネントを(フック付きの)関数コンポーネントに移行しているときに、パフォーマンスが大幅に低下していることに気付きました。

React.Componentを拡張するクラスから関数コンポーネントに移行すると、パフォーマンスが低下したと言っていますか? または、すでにReact.PureComponent (またはshouldComponentUpdate )を使用していましたか

React.memoを使用して、関数コンポーネントで同じベイルアウトセマンティクスを取得できます。

全てのコメント3件

関数コンポーネントをPureComponentでラップすると、観察される「レンダリング時間」が大幅に短縮されました。 (〜160msから〜60ms)

TreeNodeComponentレンダリングにReact.PureComponent早期にベイルアウトします。

クラスコンポーネントを(フック付きの)関数コンポーネントに移行しているときに、パフォーマンスが大幅に低下していることに気付きました。

React.Componentを拡張するクラスから関数コンポーネントに移行すると、パフォーマンスが低下したと言っていますか? または、すでにReact.PureComponent (またはshouldComponentUpdate )を使用していましたか

React.memoを使用して、関数コンポーネントで同じベイルアウトセマンティクスを取得できます。

React.ComponentからshouldComponentUpdateに移行しました。

「レンダリング」を避けるためにReact.useMemoを使用します。
React.memoは、 PureComponent結果と同じくらい良い結果をもたらします。 (〜50-60ms)

明確にしてくれてありがとう。

機能コンポーネントとクラスコンポーネントのどちらがパフォーマンスが優れているのかわかりませんでした。 長いリストには何を使うべきですか

このページは役に立ちましたか?
0 / 5 - 0 評価