iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
Modern Web

以 React 為主的那些前端事系列 第 19

Day 19 - 效能優化,避免過度 render state

  • 分享至 

  • xImage
  •  

如果有錯誤,歡迎留言指教~ Q_Q

如果你要成功更新畫面,你必須經過兩個步驟:

  1. render function
  2. virtual DOM diff

因此,要優化效能的話你有兩個方向,那就是:

不要觸發 render function

  1. 如果明確知道不該有變化,連 render 都不該呼叫~ 沒有 render 的話,virtual DOM 都不需要執行比較
  2. 利用生命週期的 shouldComponentUpdate:回傳 false,就不會重新呼叫 render function
class Content extends React.Component {
  shouldComponentUpdate(){
    return false;
  }

  render () {
    return <div>{this.props.text}</div>
  }
}

但通常判斷方式還是會以:如果每一個 props 跟 state 都沒有變,那就回傳 false

class Content extends React.Component {
  shouldComponentUpdate(nextProps, nextState){
    return !shallowEqual(this.props, nextProps) || !shallowEqual(this.state, nextState);
  }
  // 用 shallow equal 檢查 
  // (只要比較一層) props 和 state 有無改變
  // 有改變才 update component
  // 這就是 *pure render 優化*
  render () {
    return <div>{this.props.text}</div>
  }
}

保持 virtual DOM 的一致

用 Memorized Hook 來優化效能吧


上一篇
Day 18 - custom hook
下一篇
Day 20 - React.memo
系列文
以 React 為主的那些前端事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言