クリップを含むトラックのテーブルを表示するオーディオワークステーションアプリをビルドします。今私はテーブルオブジェクトを返すテーブル減速器を持っています。テーブルオブジェクトはトラックオブジェクトを含み、トラックオブジェクトはクリップオブジェクトを含む。私はテーブルストアを購読するTableContainerを持っています。私の問題は、クリップが追加または操作されるたびにページがレンダリングされるため、アプリの効率が悪いと私は考えています。現実には、クリップが存在する特定のトラックだけが正しくレンダリングされる必要がありますか?私はどのようにすべての小さな変更は、アプリケーション全体をレンダリングしないように私のアプリを構造化することができますか?効率のためにReact/Reduxアプリを構築する
答えて
反応の力は、仮想DOMを使用して比較を行い、shouldComponentUpdate
関数を使用することによって、必要なものだけを再レンダリングすることです。
パフォーマンス上の問題が発生する前に、あまり詳しく見ないでしょう。
もしそうなら、トラックを別のディレクトリに保存し、それをアプリケーション(メイン)コンポーネントに渡さないでください。 Clip
コンポーネントのmapStateToProps
関数(react-reduxを使用している場合)では、状態からトラックを取得し、その名前をプロップから取得します。このようにトラックが大きく変化すると(例えばスライスの非同期フェッチのため)、コンポーネントだけが更新されます。
任意のコンポーネントのmapStateToProps
では、親オブジェクト全体を選択してコンポーネントに送信しないでください。可能であれば、葉の値までのすべての方法で特定のプロパティを選択します。 TableContainer
のrender()
自体がtracks
配列を使用しない場合は、使用する兄弟プロパティだけが渡されるようにしてください。
ので、代わりの:
function mapStateToProps(state, props) {
return {
table: state.tables[props.tableId];
}
}
の操作を行います。
function mapStateToProps(state, props) {
let table = state.tables[props.tableId];
return {
name: table.name,
type: table.type
};
これは、あなたのコンポーネントが再レンダリングする必要があるかどうかを決定することになるとReduxのは、もっと目の肥えたことに反応できます。 clip
の変更によりtable
が変更されても、name
もtype
も変更されていないことがわかります。
ただし、Table
コンポーネントはTrack
コンポーネントもレンダリングする可能性が高いため、レンダリングの呼び出しを避けることはできません。ツリー上の任意のプロパティが変更されると、tracks
配列も変更されます。
tracks
配列にtrack
オブジェクト全体が含まれず、代わりにトラックIDのリストのみが含まれるようにすることです。その後、テーブルの横にトラックを保存することができ、一方の変更が他方のテーブルに影響することはありません。これは、Table
コンポーネントのmapStateToProps
にトラックオブジェクトをフェッチして渡していない場合にのみ有効です。 Track
コンポーネントは、実際のオブジェクトではなくそのIDを受け入れるようにしてください。このようにして、Table
コンポーネントはトラックの内容にまったく依存しません。
- 1. 効率的なデータベースを構築するためのアプローチ
- 2. Javaの効率的なマルチスレッド・アレイ構築
- 3. オブジェクトの関連階層を効率的に構築する
- 4. 構築されたキーを使った効率的なハッシュテーブルアクセス
- 5. 効率的にPython辞書をC++で構築する方法
- 6. 大規模なコードフラグメントを効率的に構築する方法
- 7. Rleベクターから効率的にGRanges/IRangesを構築する
- 8. Numpyでローリング行列を効率的に構築する
- 9. Rails 2.3.Xアプリの更新や再構築が効率的ですか?
- 10. Universalアプリを構築するための最新のリソース/チュートリアル
- 11. jQuery DOM操作効率 - JavaScriptでページ全体を構築する
- 12. StringBufferでより効率的なSQLインサートを構築する
- 13. 大規模コレクションからAVLツリーを構築するための効率的なアルゴリズム
- 14. パンダはGROUPBY:複数の列を構築し、効率的
- 15. のためのシステムを構築する
- 16. ウェブサイトを構築するためのパス
- 17. Filebeat with ELK>ログファイルごとにインデックスを効率的に構築する方法
- 18. 双方向ランダムアクセスのためのC++効率的なデータ構造
- 19. 評価システムのための効率的なMySQLテーブル構造
- 20. Firebase - 効率的なインデックス作成のためのデータ構造
- 21. 効率的なadd、remove、random.choiceのためのPythonデータ構造
- 22. 挿入のための効率的なデータ構造
- 23. SQLの効率性。テーブルの再構築または各行の比較
- 24. wordpressのgrailsアプリを構築する
- 25. ReactReduxの構造にコンポーネントとレデューサーを再利用するためのスマートなアプローチはありますか?
- 26. 効率よくインデックスを作成するためのMySQLテーブル構造の整理
- 27. リストを構築するためのelispのデータ構造/ワークフロー
- 28. アンドロイドでVoIPアプリを構築する
- 29. 効率的な追加のためにJuliaで推奨されるデータ構造
- 30. anglejs、meteorjs、ionicで構築されたアプリをどのように構築するのですか?
ページのレンダリングに重要ではない情報が必要な場合はどうすればよいですか?クリップのように、他のクリップがトラック上のどこにあるかを知る必要がありますが、クリップの移動時に再レンダリングする必要はありません。 –