Im构建一个音频工作站应用程序,该应用程序将显示包含剪辑的轨道表。现在我有一个表格减速器,它返回一个表格对象。表格对象包含轨道对象,轨道对象包含剪辑对象。我有一个TableContainer订阅表存储。我的问题是我相信我的应用程序效率不高,因为每次添加或操作剪辑时它都会重新渲染页面。实际上,只有剪辑所在的特定轨道需要重新渲染对吗?我该如何构建我的应用程序,以便每个小改动都不会呈现整个应用程序?构建我的React/Redux应用程序以提高效率
2
A
回答
1
反应的力量只是重新呈现需要的东西(通过使用虚拟DOM进行比较和shouldComponentUpdate
函数)。
在成为性能问题之前,我不会过多考虑它。
如果是这样,我会将曲目存储在单独的目录中,并且不要将它传递给应用程序(主)组件。在您的Clip
组件的mapStateToProps
函数(如果使用react-redux)中,从道具中获取它的名称时从该状态获取该道。这样,如果轨道变化很大(例如由于片段的异步获取),则只会更新组件。
2
在任何组件的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
};
这使得阵营终极版更加挑剔的,当涉及到确定你的组件是否需要重新呈现。它会看到即使table
由于clip
更改而发生更改,但name
和type
都没有更改。
但是,由于您的Table
组件也可能呈现Track
组件,因此您可能无法避免呈现调用。如果树上任何位置的任何属性被更改,则tracks
阵列也会被更改。
这种情况下的解决方案是让tracks
阵列不包含整个track
对象,而只包含一个轨道ID列表。然后,您可以将曲目存储在表格旁边,而对其中一个的更改不会影响另一个。请注意,这只有在您不去并获取并传递Table
组件的mapStateToProps
中的跟踪对象时才有效。您应该以这样一种方式制作组件,即它接受其ID而不是实际对象作为道具。这样Table
组件完全不依赖于轨道的内容。
相关问题
- 1. 优化CAD应用程序以提高效率
- 2. 提高Kinect for Windows的效率DTWGestureRecognizer应用程序
- 3. 如何提高MVC C#应用程序的生产效率?
- 4. 编码以提高IIS应用程序池内存使用率
- 5. 提高我的SQL的效率
- 6. 在C++效率结构中创建日历应用程序
- 7. 如何提高我的代码效率?
- 8. 使用网格计算提高耗时程序的效率
- 9. 提高MySQL的效率
- 10. 更改IF语句以提高效率
- 11. 这可以提高效率吗?
- 12. 重复数据以提高效率
- 13. 加载文件以提高效率
- 14. 构造NodeJS异步代码,以提高内存效率
- 15. 如何提高在.NET窗口应用程序中保存多行的效率?
- 16. 我的布局可以提高效率吗?
- 17. 如何提高iPad应用程序的内存占用率
- 18. 构建教程/为我的Android应用程序提供暗示
- 19. 提高最微不足道的C++程序的效率
- 20. 如何提高效率?
- 21. 如何提高UICollectionView效率?
- 22. 提高循环效率
- 23. 如何提高Fipy效率
- 24. PLSQL - 提高代码效率
- 25. 提高R脚本效率
- 26. SQL:提高加盟效率
- 27. 提高R脚本效率
- 28. java方法提高效率
- 29. 建立一个高效率和高效的开发流程
- 30. 节点应用程序的高CPU利用率应用程序
如果我需要那些对于渲染页面不重要的信息,该怎么办。就像一个剪辑需要知道其他剪辑在轨道上的位置,但它不需要在剪辑移动时重新渲染。 –