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利用率應用程序
如果我需要那些對於渲染頁面不重要的信息,該怎麼辦。就像一個剪輯需要知道其他剪輯在軌道上的位置,但它不需要在剪輯移動時重新渲染。 –