加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

React 性能优化技巧总结

发布时间:2019-02-26 14:03:13 所属栏目:建站 来源:落在起风的地方
导读:本文将从 render 函数的角度总结 React App 的优化技巧。需要提醒的是,文中将涉及 React 16.8.2 版本的内容(也即 Hooks),因此请至少了解 useState 以保证食用效果。 正文开始。 当我们讨论 React App 的性能问题时,组件的渲染速度是一个重要问题。在进

而对于传递箭头函数的场景,我们可以代以只唯一声明过一次的函数,从而总可以拿到相同的引用,如下所示:

  1. class App extends React.Component{  
  2.   constructor(props) {  
  3.     this.doSomethingMethod = this.doSomethingMethod.bind(this);      
  4.   }  
  5.   doSomethingMethod () { // do something}  
  6.     
  7.   render() {  
  8.     return <Bar onSomething={this.doSomethingMethod} />  
  9.   }  
  10. }  

Tip #5:控制更新

还是那句话,任何方法总有其适用范围。

第三条建议虽然处理了不必要的更新问题,但我们也不总能使用它。

而第四条,在某些情况下我们并不能拆分对象,如果我们传递了某种嵌套确实复杂的数据结构,那我们也很难将其拆分开来。

不仅如此,我们也不总能传递只声明了一次的函数。比如在我们的例子中,如果 App 是个函数式组件,恐怕就不能做到这一点了(在 class 组件中,我们可以用 bind 或者类内箭头函数来保证 this 的指向及唯一声明,而在函数式组件中则可能会有些问题)。

幸运的是, 无论是 class 组件还是函数式组件,我们都有办法控制浅比较的逻辑 。

在 class 组件中,我们可以使用生命周期钩子 shouldComponentUpdate(prevProps, prevState)来返回一个布尔值,当返回值为 true 时才会触发 render。

而如果我们使用 React.memo,我们可以传递一个比较函数作为第二个参数。

注意! React.memo 的第二参数(比较函数)和 shouldComponentUpdate 的逻辑是相反的,只有当返回值为 false 的时候才会触发 render。 参考文档 。

  1. const Bar = React.memo(  
  2.   function Bar({ name: { first, last } }) {  
  3.     console.log("update");  
  4.     return (  
  5.       <h1>  
  6.         {first} {last}  
  7.       </h1>  
  8.     );  
  9.   },  
  10.   (prevProps, newProps) =>  
  11.     prevProps.name.first === newProps.name.first &&  
  12.     prevProps.name.last === newProps.name.last  
  13. );  

尽管这条建议是可行的,但我们仍要注意 比较函数的性能开销 。如果 props 对象过深,反而会消耗不少的性能。

总结

上述场景仍不够全面,但多少能带来一些启发性思考。当然在性能方面,我们还有许多其他的问题需要考虑,但遵守上述的准则仍能带来相当不错的性能提升。

【编辑推荐】

  1. AWS 开源 SageMaker,帮助开发人员优化机器学习模型
  2. 你与数据科学家只差这 26 条 Python 技巧
  3. 在未来和AI争夺工作的16个实用技巧
  4. 互联网公司口中的架构优化、战略调整?其实是裁员不同姿势
  5. GitHub 蝉联趋势榜数日 5k+ star 的 Nginx 性能优化整理
【责任编辑:张燕妮 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读