react性能非常重要,性能优化可以说是衡量一个react程序员水平的重要标准。

减少你的渲染

这个大家都明白,只要是父组件中用了子组件,子组件就算没用prop也会进行依次渲染,

可以用pureComponent 或者 shouldComponentUpdate来控制渲染次数,

pureComponent 要注意它是浅比较,如果你的prop是对象,你直接修改对象的值是不会触发子组件渲染的,要改内存地址

也就是把整个对象给替换了,比如说



这个其实就是官网极力推荐的数据不可变,说白了就是不改变原来的复杂对象,深拷贝一份原对象再做更改

当然也可以使用Immutable.js也可以,不过写法有些繁琐,个人不喜欢

shouldComponentUpdate 放在下一节生命周期来讲

少用生命周期

看了官方文档让我感觉,官方是强力推荐用无状态组件的,我想其中一部分原因就是生命周期的问题

componentWillUpdate、componentWillReceiveProps、shouldComponentUpdate、static getDerivedStateFromProps都是消耗性能的,上一篇就举例了componentWillReceiveProps,

要做处理请使用componentDidMount、componentDidUpdate(猜想componentDidMount、componentDidUpdate这2个是在渲染之后执行)

  • componentWillReceiveProps

    第一点:上一篇就说过使用了这个componentWillReceiveProps生命周期是很消耗性能的,尽量不要使用,如果要处理props请放在componentDidMount、componentDidUpdate里使用

    第二点:不管是componentWillReceiveProps还是static getDerivedStateFromProps,都最好不要改变子组件state的值,因为改变了state又要再一次触发渲染,本身生命周期就耗性能,你还要在里面增加渲染....

    用惯了vue的,经常用watch监听改变data的值,自然就想着在监听改变state的值,一开始我也觉得不使用这种方式的监听某些功能会实现起来很困难,但是后面自己举了几个工作中的实际例子发现目前确实还没有一定要改变state的地方(如果有人看我的博客,也希望有人反驳我)

  • shouldComponentUpdate

    这个相信大家都知道,是专门用来通过手写代码做某些对比来判断是否进行重新渲染的,但是网上有大神测试过(找不到链接了)shouldComponentUpdate执行是很消耗性能的,如果不是渲染特别慢,让它渲染算了~(把自己代码写好了让它少渲染几次其实更重要)

  • static getDerivedStateFromProps

    这是一个静态方法,不能通过this获取任何东西,它改变state只能通过返回对象的形式,这个生命周期官网说是非常少用(基本替代了componentWillReceiveProps,也就是说componentWillReceiveProps也很少用),基本找不到用它的地方,官网是不会错的,既然它这么说了,你相信它就没错了,你想用getDerivedStateFromProps实现的功能用其他方式也可以很轻松的实现,官网有给出解决方案 https://zh-hans.reactjs.org/docs/react-component.html#static-getderivedstatefromprops

提高代码本身的质量

这点很关键,vue上手简单,还有watch、computed等帮助你完成工作,你用久了就会发现它很多东西定的比较死,但是react不一样,一个东西有很多种完美的实现方式(一千个人心中有一千个哈姆雷特),写vue可能看不出2个人的差距,但是react很多东西要自己选择设计实现,就能看出2个人代码功底。
设计好自己的组件,多用无状态组件(函数组件),一个页面相信你不会就用一个组件写完吧,组件设计的合理不仅让人看着舒服让人理解你的逻辑,还能方便维护提高复用的程度,说到复用,我就想到一个同事,他理解的设计组件,就是其他地方需要用他才抽成一个组件,否则一口气写完,,,,

针对这种我只能说写代码是需要动脑子思考的(这点我不接受任何反驳,深有感触 有感而发),我们即是代码的搬运工、码农、也要成为工程师,不要一辈子只会复制黏贴,多思考,组件怎么设计,问题更好的解决方案,你才能进步,有一门新技术出现,你只学学怎么使用,不如深入研究一些东西你如何进步呢,这话其实是说给我自己听的,希望自己能不断前行,不前进就会被it这个行业所淘汰

React 性能调优记录(下篇),如何写高性能的代码的更多相关文章

  1. React 性能调优总结

    React 性能调优总结 首先要说一个库: why-did-you-update, 地址:why-did-you-update, 利用这个库可以在页面上快速看到多余渲染的问题: 因为多数情况下我们在R ...

  2. React 性能调优原理

    一.React影响性能的两个地方 二.调优原理

  3. MapReduce性能调优记录

    MapReduce原理 要知道怎么对MapReduce作业进行调优前提条件是需要对Map-Reduce的过程了然于胸. Map-Reduce运行原理图: Map Side 1.从磁盘读取数据并分片 默 ...

  4. iOS开发--性能调优记录

    CPU VS GPU 关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器).但是由于历史原因,我们可以说CPU所做的工作都在软件层面,而GPU在硬件层面 对于图像处理,通常用硬件 ...

  5. [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码

    6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...

  6. React如何性能调优

    一. 二.调优例子 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...

  7. web前端性能调优

    最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...

  8. web前端性能调优(一)

    最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...

  9. Java性能调优:利用JMC分析性能

    Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JMC分析 ...

随机推荐

  1. Appium - adb命令操作

    1.Android 调试桥adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利,如安装和调 ...

  2. MySQL -- 表联结

    创建联结:(使用WHERE联结)SELECTvend_name,prod_name,prod_priceFROMvendors,productsWHEREvendors.vend_id=product ...

  3. Winform框架中窗体基类的用户身份信息的缓存和提取

    在Winform开发中,有时候为了方便,需要把窗体的一些常规性的数据和操作函数进行封装,通过自定义基类窗体的方式,可以实现这些封装管理,让我们的框架统一化.简单化的处理一些常规性的操作,如这里介绍的用 ...

  4. 开发工具IDE从入门到爱不释手(一)项目初始配置

    前言 版本:IDE 2019.2.3 JDK:1.8 一.字体 快捷键:Ctrl+Alt+S  ;打开Settings,一般系统配置都在这里 输入font,需要修改字体有三处 Apperance:ID ...

  5. java学习笔记之OOP(二)

    java学习笔记二.面向对象[OOP]Object Oriented Programming 一.三大特性: 1.封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用 ...

  6. LinuxMint 19/Ubuntu 19.10重置开始菜单以及任务栏

    ====================== 问题:任务栏以及开始菜单弄不见了 解决方法: 快捷键打开终端,输入重置命令: dconf reset -f /

  7. 福利!Python制作动态字符画(附源码)

    字符画,一种由字母.标点.汉字或其他字符组成的图画.简单的字符画是利用字符的形状代替图画的线条来构成简单的人物.事物等形象,它一般由人工制作而成:复杂的字符画通常利用占用不同数量像素的字符代替图画上不 ...

  8. Fedora无法安装Qt4

    针对QT4,6安装时遇到的情况 安装平台:fedora14i686 Qt版本:4.6.2 1:解压qt的tar包 我们进行解压(tar xzvf ***.tar.gz),解压到指定目录的话后边加上: ...

  9. 数据库技术中的触发器(Trigger)——和ContentObserver功能类似

    刚总结过ContentObserver的作用和特点,顺便总结下数据库技术中的触发器(Trigger),触 发 器 分 为 表 触 发 器 . 行 触 发 器

  10. 2019-07-06 sql 连续出现次数

    由手机通讯记录界面想到的问题 SELECT CASE WHEN AA.num=1 THEN AA.Tel ELSE AA.Tel+'('+CASt(AA.num AS VARCHAR(4))+')' ...