react性能優(yōu)化

react性能優(yōu)化

  1. code splitting

    • 入口起點:使用 entry 配置手動地分離代碼袖外。

    • 防止重復(fù):使用 SplitChunks 去重和分離 chunk晕窑。

    • 動態(tài)導(dǎo)入:通過模塊的內(nèi)聯(lián)函數(shù)調(diào)用來分離代碼。

      import { add } from './math';
      console.log(add(16, 26));
      // 改寫成動態(tài) import 迟螺,首次加載時不去加載 math ,減少首次加載資源的體積。 ↓↓↓
      import("./math").then(math => {
        console.log(math.add(16, 26));
      });
      
      // 引用react的高階組件react-loadable進行動態(tài)import烈掠。
      const LoadableComponent = Loadable({
        loader: () => import('./my-component'),
        loading: Loading,
      });// 先展示一個 loading-component胳搞,然后動態(tài)加載 my-component 的代碼会前,組件代碼加載完畢之后替換掉 loading-component
      
  2. shouldComponentUpdate避免重復(fù)渲染

    • 比較組件的props和state是否真的發(fā)生變化,如果發(fā)生變化則返回true蛔溃,否則返回false绰沥。
    • React提供了一個輔助對象來實現(xiàn)這個邏輯 - 繼承自React.PureComponent篱蝇。
  3. 使用不可突變的數(shù)據(jù)結(jié)構(gòu)

    • 數(shù)據(jù)突變(mutated)是指變量的引用沒有改變(指針地址未改變),但是引用指向的數(shù)據(jù)發(fā)生了變化(指針指向的數(shù)據(jù)發(fā)生變更)徽曲;PureComponent 僅僅對 this.props.words的新舊值進行“淺比較”零截。
    • 數(shù)組使用concat,對象使用Object.assign()
    • ES6支持?jǐn)?shù)組或?qū)ο蟮膕pread語法
    • 使用不可突變數(shù)據(jù)immutable.js
  4. 組件盡可能拆分、解耦

    • 組件盡可能的細(xì)分秃臣,比如一個input+list組件涧衙,可以將list分成一個PureComponent,只在list數(shù)據(jù)變化時更新奥此。否則在input值變化頁面重新渲染的時候弧哎,list也需要進行不必要的DOM diff。
  5. 列表類組件優(yōu)化

    • 對于一個基于排序的組件渲染:為組件添加一個key屬性以唯一的標(biāo)識組件稚虎,直接使用insertBefore操作移動組件位置撤嫩,而這個操作是移動DOM節(jié)點最高效的辦法
  6. bind函數(shù)優(yōu)化

    • constructor綁定:this.handleClick = this.handleClick.bind(this);只在組件初始化的時候執(zhí)行一次
    • 使用時綁定:<p onClick={this.handleClick.bind(this)}>每次render都會執(zhí)行
    • 使用箭頭函數(shù):<Test click={() => { this.handleClick() }}/>每一次render時候都會生成新的箭頭函數(shù)。
  7. 不要濫用props

    • 盡量只傳需要的數(shù)據(jù)蠢终,避免多余的更新序攘,盡量避免使用{...props}
  8. reactDOMServer進行服務(wù)端渲染組件

    • 為了實現(xiàn)SSR,你可能會用nodejs框架(Express蜕径、Hapi两踏、Koa)來啟動一個web服務(wù)器,接著調(diào)用 renderToString 方法去渲染你的根組件成為字符串兜喻,最后你再輸出到 response梦染。
    • 客戶端使用render方法來生成HTMLReactDOM.render(<MyPage />, document.getElementById('app'));
  9. react 性能檢測工具

    • react-addons-perf:

      • Perf.start() 開始記錄
      • Perf.stop() 結(jié)束記錄
      • Perf.printInclusive() 查看所有設(shè)計到的組件render
      • Perf.printWasted() 查看不需要的浪費組件render
    • react16版本的方法,在url后加上?react_pref朴皆,就可以在chrome瀏覽器的performance帕识,我們可以查看User Timeing來查看組件的加載時間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遂铡,一起剝皮案震驚了整個濱河市肮疗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扒接,老刑警劉巖伪货,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钾怔,居然都是意外死亡碱呼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門宗侦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愚臀,“玉大人,你說我怎么就攤上這事矾利」昧眩” “怎么了馋袜?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舶斧。 經(jīng)常有香客問我欣鳖,道長,這世上最難降的妖魔是什么茴厉? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任观堂,我火速辦了婚禮,結(jié)果婚禮上呀忧,老公的妹妹穿的比我還像新娘。我一直安慰自己溃睹,他們只是感情好而账,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著因篇,像睡著了一般泞辐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竞滓,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天咐吼,我揣著相機與錄音,去河邊找鬼商佑。 笑死锯茄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茶没。 我是一名探鬼主播肌幽,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抓半!你這毒婦竟也來了喂急?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤笛求,失蹤者是張志新(化名)和其女友劉穎廊移,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體探入,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡狡孔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了新症。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片步氏。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖徒爹,靈堂內(nèi)的尸體忽然破棺而出荚醒,到底是詐尸還是另有隱情芋类,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布界阁,位于F島的核電站侯繁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泡躯。R本人自食惡果不足惜贮竟,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望较剃。 院中可真熱鬧咕别,春花似錦、人聲如沸写穴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啊送。三九已至偿短,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間馋没,已是汗流浹背昔逗。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留篷朵,地道東北人勾怒。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像款票,于是被迫代替她去往敵國和親控硼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 這篇文章主要介紹了淺談react性能優(yōu)化的方法艾少,小編覺得挺不錯的卡乾,現(xiàn)在分享給大家,也給大家做個參考缚够。一起跟隨小編過...
    880d91446f17閱讀 3,542評論 0 3
  • 平常在完成業(yè)務(wù)功能開發(fā)后幔妨,不知道你是否還會精益求精,做一些性能優(yōu)化方面的工作呢谍椅?React框架中有一些性能優(yōu)化相關(guān)...
    SCQ000閱讀 1,351評論 0 52
  • React是一個專注UI層的框架误堡,它使用虛擬DOM技術(shù),以保證它UI的告訴喧染雏吭;使用單向數(shù)據(jù)流锁施,因此它的數(shù)據(jù)綁定更...
    梭子蟹_3984閱讀 766評論 0 0
  • 初學(xué)者對React可能滿懷期待,覺得React可能完爆其它一切框架,甚至不切實際地認(rèn)為React可能連原生的渲染都...
    梭子蟹_3984閱讀 539評論 0 1
  • 寫了一段時間的react之后,漸漸的喜歡上了使用react來寫應(yīng)用姥饰。我們知道傻谁,F(xiàn)acebook在推出react時打...
    darrell閱讀 44,081評論 9 63