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. 使用idea,GitHub时,push和clone出现的一些问题

    使用idea,GitHub时,push和clone出现的一些问题 报错:No anonymous write access 这个的原因是在idea记住的用户名和GitHub登录的不一样,导致报错.笔者 ...

  2. odoo里的开发案例

    1.模块命名[驼峰命名方法] res开头的是:resources   常见模型:res.users,   res.company,    res.partner,   res.config.setti ...

  3. 流暢的pyhton4---數據庫備份

    一.linux數據庫備份腳本 1.数据库备份,命令如下: ./pg_dump -h localhost -p 5432 -U postgres -W -F c -b -v -f "/opt/ ...

  4. 第四篇--Beyond Compare4 试用期30天后

    30天后删除BCUnrar.dll这个文件,继续使用30天.还有就是注册表中regedit-->HEKY_CURRENT_USER-->Software-->Scooter Soft ...

  5. django2.1实现全文检索(最详细)+遇到的坑+jieba分词

    首先django实现全文检索在这里使用的是haystack,环境是django2.1+win10 64+py3.7 1: 安装包: pip install dgango-haystack #安装全局检 ...

  6. C++ 定义默认值void locals_index(int reg, int offset = 1);

    看jvm源码的时候怎么也看不懂,来回看了几次了就是关于iload 6 指令的解析 def(Bytecodes::_lload , ubcp|____|____|____, vtos, ltos, ll ...

  7. K8s之Prometheus监控

    目录 容器监控与报警 Prometheus prometheus简介 prometheus系统架构 prometheus 安装方式 容器方式安装prometheus operator部署 克隆项目 创 ...

  8. JS进度条顺滑版实现

    进度条不顺滑 相信大多前端同学都自己写过音频.视频播放器,实现并不复杂.最近在小程序里,做了一个类似微博刷视频的需求.其中有一部分功能需要实现自定义进度条,在做完第一版之后发现进度条不顺滑,而后想查查 ...

  9. 使用C#winform编写渗透测试工具--端口扫描

    使用C#winform编写渗透测试工具--端口扫描器 主要介绍使用C#winform编写渗透测试工具--端口扫描器,端口扫描器则是一种检测服务器或者主机虚拟端口是开启或关闭的工具.由于连接到局域网或互 ...

  10. centos ansible常用命令

    ansible在日常运维中经常使用,特别是批量执行多台服务器的时候,有效减小重复的操作成本,以下从安装到使用仅讲解工作中常用的几种方式,模块很多功能很强大,但不做全面讨论. ansible安装 在ce ...