React 性能调优记录(下篇),如何写高性能的代码
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 性能调优记录(下篇),如何写高性能的代码的更多相关文章
- React 性能调优总结
React 性能调优总结 首先要说一个库: why-did-you-update, 地址:why-did-you-update, 利用这个库可以在页面上快速看到多余渲染的问题: 因为多数情况下我们在R ...
- React 性能调优原理
一.React影响性能的两个地方 二.调优原理
- MapReduce性能调优记录
MapReduce原理 要知道怎么对MapReduce作业进行调优前提条件是需要对Map-Reduce的过程了然于胸. Map-Reduce运行原理图: Map Side 1.从磁盘读取数据并分片 默 ...
- iOS开发--性能调优记录
CPU VS GPU 关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器).但是由于历史原因,我们可以说CPU所做的工作都在软件层面,而GPU在硬件层面 对于图像处理,通常用硬件 ...
- [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码
6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...
- React如何性能调优
一. 二.调优例子 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...
- web前端性能调优
最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...
- web前端性能调优(一)
最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...
- Java性能调优:利用JMC分析性能
Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JMC分析 ...
随机推荐
- java try_catch 分析
1.若一段代码前有异常抛出,并且这个异常没有被捕获,这段代码将产生编译时错误「无法访问的语句」.如 public class try_catch_Demo { public static void m ...
- Thinkphp中取消url中的index.php 和 Home 默认模块
将配置文件中改: <?phpreturn array( //'配置项'=>'配置值' 'URL_MODEL'=>'2', //去掉url中index.php ' ...
- SoundPool概率性无声问题
public class SoundManager { private static SoundManager instance; private SoundPool mSoundPool; priv ...
- anyRTC SDK 5月迭代:优化自定义加密功能,让通信更安全
anyRTC SDK 5月上新,新增多种加密类型,让实时音视频通信更安全:新增移动端推流支持1080P分辨率的支持:此外还对事件上报.日志详情.数据统计.网络传输等多项功能进行了优化改进. 以下为更新 ...
- 几张图搞懂 NodeJS 的流
假设我们现在要盖一座房子,我们买了一些砖块,厂家正在送货.现在我们有两个选择,一是等所有砖块都到了以后再开始动工:二是到一批砖块就开始动工,砖块到多少我们就用多少. 这两种方式哪种效率更高呢?显然是第 ...
- IDEA使用Tomcat时控制台乱码的解决方案>从零开始学JAVA系列
IDEA使用Tomcat时控制台乱码的解决方案 解决方案1,修改启动时虚拟机参数 解决方案2,修改idea的设置 解决方案3,修改idea配置文件 在最后添加一行 '-Dfile.encoding=U ...
- SQL语句(四)联表查询
目录 一.关联查询的分类 按年代分 按功能分 二.sql92语法的连接 语法 1. 简单应用 2. 为表起别名 3. 加入筛选 4. 加入分组 5. 三表连接 6. 非等值连接 7. 自连接 三.sq ...
- 强烈IDEA这些插件,让你的开发速度飞起来!
大家好,我是大彬~ 俗话说:工欲善其事必先利其器.今天给大家介绍几款我自己经常用的 IDEA 插件,很强大,助力大家开发. 插件安装 以IDEA为例,进入settings->Plugins-&g ...
- python自动化之(自动生成测试报告)
前言: 用python执行测试脚本, 测试报告是记录我们测试过程的问题, 方便我们对整个测试过程的把控. 这里引用的是别人写好的模板, 我们拿过来用就OK, 能力强者可自行编写模板 测试报告图模板: ...
- Vue响应式原理底层代码模拟实现
整体分析Vue的基本结构如下图所示:(备注:完整代码github地址https://github.com/1512955040/MiniVue) 上图中,为我们模拟最小vue的整体结构,首先创建一个v ...