React 項目中有哪些細節可以優化?實際開發中都做過哪些性能優化


摘自 https://github.com/lgwebdream/FE-Interview/issues/12

對於正常的項目優化,一般都涉及到幾個方面,開發過程中、上線之后的首屏、運行過程的狀態

  • 來聊聊上線之后的首屏及運行狀態:

    • 首屏優化一般涉及到幾個指標FP、FCP、FMP;要有一個良好的體驗是盡可能的把FCP提前,需要做一些工程化的處理,去優化資源的加載

    • 方式及分包策略,資源的減少是最有效的加快首屏打開的方式;

    • 對於CSR的應用,FCP的過程一般是首先加載js與css資源,js在本地執行完成,然后加載數據回來,做內容初始化渲染,這中間就有幾次的網絡反復請求的過程;所以CSR可以考慮使用骨架屏及預渲染(部分結構預渲染)、suspence與lazy做懶加載動態組件的方式

    • 當然還有另外一種方式就是SSR的方式,SSR對於首屏的優化有一定的優勢,但是這種瓶頸一般在Node服務端的處理,建議使用stream流的方式來處理,對於體驗與node端的內存管理等,都有優勢;

    • 不管對於CSR或者SSR,都建議配合使用Service worker,來控制資源的調配及骨架屏秒開的體驗

    • react項目上線之后,首先需要保障的是可用性,所以可以通過React.Profiler分析組件的渲染次數及耗時的一些任務,但是Profile記錄的是commit階段的數據,所以對於react的調和階段就需要結合performance API一起分析;

    • 由於React是父級props改變之后,所有與props不相關子組件在沒有添加條件控制的情況之下,也會觸發render渲染,這是沒有必要的,可以結合React的PureComponent以及React.memo等做淺比較處理,這中間有涉及到不可變數據的處理,當然也可以結合使用ShouldComponentUpdate做深比較處理;

    • 所有的運行狀態優化,都是減少不必要的render,React.useMemoReact.useCallback也是可以做很多優化的地方;

    • 在很多應用中,都會涉及到使用redux以及使用context,這兩個都可能造成許多不必要的render,所以在使用的時候,也需要謹慎的處理一些數據;

    • 最后就是保證整個應用的可用性,為組件創建錯誤邊界,可以使用componentDidCatch來處理;

  • 實際項目中開發過程中還有很多其他的優化點:

    • 1.保證數據的不可變性
    • 2.使用唯一的鍵值迭代
    • 3.使用web worker做密集型的任務處理
    • 4.不在render中處理數據
    • 5.不必要的標簽,使用React.Fragments


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM