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分析 ...
随机推荐
- [noip6]模板
平衡树好题啊 现在暂时还不知道用普通线段树该咋做.... 刚刚做完 二逼平衡树,感觉自己的 \(splay\) 水平有了很大很大的长进,然鹅.... 这题又给我当头一棒.... 然后就一下午出去了但总 ...
- PostgreSQL数据库结构
PG数据存储结构分为:逻辑结构和物理存储. 一.逻辑存储结构是:内部的组织和管理数据的方式[逻辑存储结构适用于不同的操作系统和硬件平台] 二.物理存储结构是:操作系统中组织和管理数据的方式. 1.逻辑 ...
- Pycharm关联gitlab(http方式)
Pycharm支持关联gitlab仓库,关联后对远端项目的克隆和提交都很方便.当初笔者在关联时遇到了很多坑,网上也没找到相关解决办法,所以在这里分享下完整的关联过程. 一.安装git 下载地址http ...
- 渗透测试思路 - CTF(番外篇)
渗透测试思路 Another:影子 (主要记录一下平时渗透的一些小流程和一些小经验) CTF(番外篇) 笔者是一个WEB狗,更多的是做一些WEB类型题目,只能怪笔者太菜,哭~~ 前言 本篇 ...
- Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)
影响版本 Spring WebFlow 2.4.0 - 2.4.4 访问id为1的酒店http:/ :8080/hotels/1,点击预订按钮"Book Hotel",填写相关信息 ...
- 多线程案例:龟兔赛跑-Race
多线程案例:龟兔赛跑-Race 前置条件: 首先来个赛道距离,然后要离终点越来越近 判断比赛是否结束 打印出胜利者 龟兔赛跑开始 故事中是乌龟赢了,兔子需要睡觉,所以我们来模拟兔子睡觉 乌龟赢得比赛 ...
- SaToken学习笔记-01
SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...
- GitHub创建图床
GitHub 写第一篇文章时发现从typora粘贴过来的文章会出现下面的情况 经常在Windows用typora的小伙一定遇到过一个问题:不管是用截图工具截图后直接粘贴,还是通过选择文件夹选择图片的方 ...
- Using Evernote with Wine on Mint
Install Evernote Install Evernote in Wine: wine Evernote_xxx.exe; Backup Evernote Database File Loca ...
- 计算机网络 中国大学MOOC 哈尔滨工业大学 习题答案
转自 https://blog.csdn.net/qq_37514135/article/details/82733651 计算机网络作业题 第一章 第一题 如图所示网络.A在t=0时刻开始向C发送一 ...