摘要:原文鏈接原作者利用原生方法替換實現性能提升現在我們正在用實現一個具有郵件收發和即時聊天功能的客戶端工具。為了防止用戶感覺卡頓,所有的動作都需要在毫秒級完成。然而理想是豐滿的,現實是殘酷的。。。
原文鏈接
https://medium.com/missive-ap...
原作者
Philippe Lehoux
現在我們正在用React實現一個具有郵件收發和即時聊天功能的客戶端工具。
如圖所示,通過鼠標和鍵盤的上下箭頭可以從左側的導航欄切換不同的對話。為了防止用戶感覺卡頓,所有的動作都需要在毫秒級完成。
一段對話可能包含成千上百條的評論、郵件和各種各樣的事件,而所有的這些內容都由各種組件實現。為了提升在不同對話間切換時的渲染速度,我們開始著手將一些stateful組件變為stateless組件(此處原文叫做Function component)。
舉個栗子,之前的一個組件是這樣的:
class Avatar extends React.Component { render() { return ; } }
經過轉換之后變為:
const Avatar = (props) => { return ; }
其實一個Functional component就是一個簡單的js函數,這個函數返回要渲染的元素。Functional component也被稱為stateless組件。
我們認為通過將stateful組件變為stateless組件后性能會有立竿見影的提升,因為當我們使用stateful組件時,在通過導航切換不同對話時React會不斷的進行上百次的mount和unmount處理,而stateless本身只是基礎的js函數,它的觸發就像觸發生命周期函數一樣簡單,避免了多次的mount和unmount處理,從而節省了渲染時間。
然而理想是豐滿的,現實是殘酷的。。。
那么我們要怎么才能跳過React的內部機制,不將stateless組件的內容通過react componet渲染,而是直接通過調用函數的方式渲染呢?
其實很簡單,我們只需要改變一下調用方式即可:
ReactDOM.render(-, mountNode ); // Compiled JavaScript ReactDOM.render(React.createElement( "div", null, - React.createElement(Avatar, { url: avatarUrl }), + Avatar({ url: avatarUrl }), React.createElement( "div", null, commentBody ) ), mountNode);+ {Avatar({ url: avatarUrl })} {commentBody}
通過性能測試可以看出如果只是通過將stateful組件改為stateless組件,而不改變調用方式,渲染速度只提升了6%;而改變調用方式后,速度提升了45%。
就像上面的性能測試中展現出來的一樣,這些修改很適用于提升像我們的應用一樣通過普通的stateful組件方式渲染會觸發過多的mount和unmount事件的應用場景。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/87343.html
摘要:前言距離我進新公司也有一個多月,這一個月的事件使用寫了一個項目,期間斷斷續續重構了兩三次,目前已經完成第一階段測試,也總結分享一些使用的一些坑。因為他的不可變特點,我們不會在不經意見不小心改變了,而引起不必要的問題。 前言 距離我進新公司也有一個多月,這一個月的事件使用react寫了一個項目,期間斷斷續續重構了兩三次,目前已經完成第一階段測試,也總結分享一些使用react的一些坑。 s...
摘要:前端每周清單第期微服務實踐,與,組件技巧,攻防作者王下邀月熊編輯徐川前端每周清單專注前端領域內容,以對外文資料的搜集為主,幫助開發者了解一周前端熱點分為新聞熱點開發教程工程實踐深度閱讀開源項目巔峰人生等欄目。 前端每周清單第 26 期:Node.js 微服務實踐,Vue.js 與 GraphQL,Angular 組件技巧,HeadlessChrome 攻防 作者:王下邀月熊 編輯:徐川...
摘要:在年成為最大贏家,贏得了實現的風暴之戰。和他的競爭者位列第二沒有前端開發者可以忽視和它的生態系統。他的殺手級特性是探測功能,通過檢查任何用戶的功能,以直觀的方式讓開發人員檢查所有端點。 2016 JavaScript 后起之秀 本文轉載自:眾成翻譯譯者:zxhycxq鏈接:http://www.zcfy.cc/article/2410原文:https://risingstars2016...
閱讀 2984·2023-04-26 02:04
閱讀 1290·2021-11-04 16:07
閱讀 3720·2021-09-22 15:09
閱讀 688·2019-08-30 15:54
閱讀 1910·2019-08-29 14:11
閱讀 2537·2019-08-26 12:19
閱讀 2265·2019-08-26 12:00
閱讀 768·2019-08-26 10:27