摘要:原文鏈接原作者利用原生方法替換實(shí)現(xiàn)性能提升現(xiàn)在我們正在用實(shí)現(xiàn)一個(gè)具有郵件收發(fā)和即時(shí)聊天功能的客戶端工具。為了防止用戶感覺卡頓,所有的動(dòng)作都需要在毫秒級(jí)完成。然而理想是豐滿的,現(xiàn)實(shí)是殘酷的。。。
原文鏈接
https://medium.com/missive-ap...
原作者
Philippe Lehoux
現(xiàn)在我們正在用React實(shí)現(xiàn)一個(gè)具有郵件收發(fā)和即時(shí)聊天功能的客戶端工具。
如圖所示,通過鼠標(biāo)和鍵盤的上下箭頭可以從左側(cè)的導(dǎo)航欄切換不同的對話。為了防止用戶感覺卡頓,所有的動(dòng)作都需要在毫秒級(jí)完成。
一段對話可能包含成千上百條的評(píng)論、郵件和各種各樣的事件,而所有的這些內(nèi)容都由各種組件實(shí)現(xiàn)。為了提升在不同對話間切換時(shí)的渲染速度,我們開始著手將一些stateful組件變?yōu)閟tateless組件(此處原文叫做Function component)。
舉個(gè)栗子,之前的一個(gè)組件是這樣的:
class Avatar extends React.Component { render() { return ; } }
經(jīng)過轉(zhuǎn)換之后變?yōu)椋?/p>
const Avatar = (props) => { return ; }
其實(shí)一個(gè)Functional component就是一個(gè)簡單的js函數(shù),這個(gè)函數(shù)返回要渲染的元素。Functional component也被稱為stateless組件。
我們認(rèn)為通過將stateful組件變?yōu)閟tateless組件后性能會(huì)有立竿見影的提升,因?yàn)楫?dāng)我們使用stateful組件時(shí),在通過導(dǎo)航切換不同對話時(shí)React會(huì)不斷的進(jìn)行上百次的mount和unmount處理,而stateless本身只是基礎(chǔ)的js函數(shù),它的觸發(fā)就像觸發(fā)生命周期函數(shù)一樣簡單,避免了多次的mount和unmount處理,從而節(jié)省了渲染時(shí)間。
然而理想是豐滿的,現(xiàn)實(shí)是殘酷的。。。
那么我們要怎么才能跳過React的內(nèi)部機(jī)制,不將stateless組件的內(nèi)容通過react componet渲染,而是直接通過調(diào)用函數(shù)的方式渲染呢?
其實(shí)很簡單,我們只需要改變一下調(diào)用方式即可:
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組件,而不改變調(diào)用方式,渲染速度只提升了6%;而改變調(diào)用方式后,速度提升了45%。
就像上面的性能測試中展現(xiàn)出來的一樣,這些修改很適用于提升像我們的應(yīng)用一樣通過普通的stateful組件方式渲染會(huì)觸發(fā)過多的mount和unmount事件的應(yīng)用場景。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/87343.html
摘要:前言距離我進(jìn)新公司也有一個(gè)多月,這一個(gè)月的事件使用寫了一個(gè)項(xiàng)目,期間斷斷續(xù)續(xù)重構(gòu)了兩三次,目前已經(jīng)完成第一階段測試,也總結(jié)分享一些使用的一些坑。因?yàn)樗牟豢勺兲攸c(diǎn),我們不會(huì)在不經(jīng)意見不小心改變了,而引起不必要的問題。 前言 距離我進(jìn)新公司也有一個(gè)多月,這一個(gè)月的事件使用react寫了一個(gè)項(xiàng)目,期間斷斷續(xù)續(xù)重構(gòu)了兩三次,目前已經(jīng)完成第一階段測試,也總結(jié)分享一些使用react的一些坑。 s...
摘要:原文地址原文作者譯文出自掘金翻譯計(jì)劃譯者校對者統(tǒng)一樣式語言在過去幾年中,我們見證了的興起,尤其是在社區(qū)。根本上來說,純粹用于只是一個(gè)命名規(guī)范,它要求樣式的類名要遵守的模式。 原文地址:A Unified Styling Language 原文作者:Mark Dalgleish 譯文出自:掘金翻譯計(jì)劃 譯者:ZhangFe 校對者:JackGit,yifili09 統(tǒng)一樣式語言 在過...
摘要:前端每周清單第期微服務(wù)實(shí)踐,與,組件技巧,攻防作者王下邀月熊編輯徐川前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。 前端每周清單第 26 期:Node.js 微服務(wù)實(shí)踐,Vue.js 與 GraphQL,Angular 組件技巧,HeadlessChrome 攻防 作者:王下邀月熊 編輯:徐川...
摘要:在年成為最大贏家,贏得了實(shí)現(xiàn)的風(fēng)暴之戰(zhàn)。和他的競爭者位列第二沒有前端開發(fā)者可以忽視和它的生態(tài)系統(tǒng)。他的殺手級(jí)特性是探測功能,通過檢查任何用戶的功能,以直觀的方式讓開發(fā)人員檢查所有端點(diǎn)。 2016 JavaScript 后起之秀 本文轉(zhuǎn)載自:眾成翻譯譯者:zxhycxq鏈接:http://www.zcfy.cc/article/2410原文:https://risingstars2016...
閱讀 2964·2023-04-26 02:04
閱讀 1278·2021-11-04 16:07
閱讀 3699·2021-09-22 15:09
閱讀 678·2019-08-30 15:54
閱讀 1899·2019-08-29 14:11
閱讀 2525·2019-08-26 12:19
閱讀 2255·2019-08-26 12:00
閱讀 752·2019-08-26 10:27