Day 19 - 效能优化,避免过度 render state

如果有错误,欢迎留言指教~ 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 来优化效能吧


<<:  【Day19】维持连线 ─ 工具实作篇(一)

>>:  [Day19] 团队管理:绩效对谈

Day 26:专案06 - 股市趋势图03 | Matplotlib、Pandas绘图

图片来源:https://unsplash.com/photos/mcAUHlGirVs 前两天已...

day 30 - 结语

这30天大略的纪录了平常我在开发过程会使用到的项目, 从开始选用工具到应用工具的分享, 只是我初步设...

Day8-流程控制表达

第四章也蛮简单的,Böhm与Jacopini证明所有程序都可使用三种流程控制表达 执行一个子程序,然...

ISO 27001 资讯安全管理系统 【解析】(二十三)

识别情景 结合前面所有的资讯,我们可以将威胁利用弱点损害资产的机密性、可用性及完整性的情景重建与识...

Scanners API-总金额篇

这个API可以取得总金额的排名, 步骤如下: (1)汇入需要的库 import shioaji as...