国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【譯】利用js原生方法替換react component實(shí)現(xiàn)性能提升

piapia / 1660人閱讀

摘要:原文鏈接原作者利用原生方法替換實(shí)現(xiàn)性能提升現(xiàn)在我們正在用實(shí)現(xiàn)一個(gè)具有郵件收發(fā)和即時(shí)聊天功能的客戶端工具。為了防止用戶感覺卡頓,所有的動(dòng)作都需要在毫秒級(jí)完成。然而理想是豐滿的,現(xiàn)實(shí)是殘酷的。。。

原文鏈接
https://medium.com/missive-ap...
原作者
Philippe Lehoux

利用js原生方法替換react component實(shí)現(xiàn)性能提升

現(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(
   
- + {Avatar({ url: avatarUrl })}
{commentBody}
, mountNode ); // Compiled JavaScript ReactDOM.render(React.createElement( "div", null, - React.createElement(Avatar, { url: avatarUrl }), + Avatar({ url: avatarUrl }), React.createElement( "div", null, commentBody ) ), mountNode);

通過性能測試可以看出如果只是通過將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

相關(guān)文章

  • react+redux+webpack移動(dòng)端項(xiàng)目總結(jié)

    摘要:前言距離我進(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...

    garfileo 評(píng)論0 收藏0
  • 】統(tǒng)一樣式語言

    摘要:原文地址原文作者譯文出自掘金翻譯計(jì)劃譯者校對者統(tǒng)一樣式語言在過去幾年中,我們見證了的興起,尤其是在社區(qū)。根本上來說,純粹用于只是一個(gè)命名規(guī)范,它要求樣式的類名要遵守的模式。 原文地址:A Unified Styling Language 原文作者:Mark Dalgleish 譯文出自:掘金翻譯計(jì)劃 譯者:ZhangFe 校對者:JackGit,yifili09 統(tǒng)一樣式語言 在過...

    fjcgreat 評(píng)論0 收藏0
  • Taro 簡介

    摘要:讓人又愛又恨的微信小程序自微信小程序以下簡稱小程序誕生以來,就伴隨著贊譽(yù)與爭議不斷。同時(shí)于開發(fā)者來說,小程序的生態(tài)不斷在完善,許多的坑已被踩平,雖然還是存在一些令人詬病的問題,但已經(jīng)足見微信的誠意了。 Taro 介紹 在互聯(lián)網(wǎng)不斷發(fā)展的今天,前端程序員們也不斷面臨著新的挑戰(zhàn),在這個(gè)變化多端、不斷革新自己的領(lǐng)域,每一年都有新的美好事物在發(fā)生。從去年微信小程序的誕生,到今年的逐漸火熱,以及...

    sixgo 評(píng)論0 收藏0
  • 前端每周清單:Node.js 微服務(wù)實(shí)踐,Vue.js 與 GraphQL,Angular 組件技巧

    摘要:前端每周清單第期微服務(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 攻防 作者:王下邀月熊 編輯:徐川...

    wall2flower 評(píng)論0 收藏0
  • ( & 轉(zhuǎn)載) 2016 JavaScript 后起之秀

    摘要:在年成為最大贏家,贏得了實(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...

    darry 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<