React性能优化相关

React渲染页面包括两个很重要的组成部分:

  1.构建虚拟dom

  2.根据虚拟dom变化渲染真实dom

对于第二部分来说,我们很难深入到React核心的diff算法等,因此主要从第一部分入手来优化性能。

针对第一部分,从优化角度来说,最直观想到的就是缩短构建虚拟dom的时间。具体到组件层面,就是减少无状态组件的函数执行以及类组件的render。

函数组件:

  hooks是专门针对函数组件来设计的模式,如果不使用hooks,函数组件便无法保存和管理自己的状态,直白一点理解就是函数每次执行的时候内部的变量都会重新初始化。hooks通过将变量值保存在函数外部实现状态的保存,这样即使下一次函数再次执行,其内部变量被赋予的将是上次被更改过的变量值。这样也导致一些问题,比如每次变量赋值的顺序都要一致,否则变量之间的值就会错乱。

  如果函数组件内部有子组件需要被渲染,就可以通过上一次某些变量的状态来决定是否渲染此子组件:React.useMemo((props)=>CC||FC,[...args]),这里的args在下次函数组件执行的时候每项都会与上一次保留下来的args浅比较,相同则直接返回第一个参数上次执行后保存下来的单例。函数组件利用hook实现了多状态管理,这里的useMemo只在函数组件内部执行。

类组件:

  PureComponent是官方写明的优化方法,其特点是自带shouldComponentUpdate钩子,通过浅比较传进来的props来实现返回上次render返回的组件还是重新render返回一个新的组件。PureComponent可以看作是类组件内部实现优化的方法,和上面提到的useMemo相比,由于其无法定制浅比较的对象,功能显得不够强大。

  一个既可以作用于函数组件又可以作用于类组件的通用方法是React.memo(CC || FC),其功能也是监听自身的props,并通过浅比较来决定是否执行return或render返回一个新的组件。memo和useMemo虽然最终都实现了缓存上一个单例的效果,但不同之处也很明显,首先就是用于浅比较的对象不同,其次memo是通过闭包来缓存状态,这意味着应该使用其执行后返回的组件,而useMemo需要用户定义浅比较的参数,同时实现多状态管理,因此必须在函数组件内部使用。

原文地址:https://www.cnblogs.com/lowki/p/12003288.html

时间: 2024-10-07 13:48:29

React性能优化相关的相关文章

mysql 性能优化相关

mysql 性能优化相关: 查看正在运行的sql进程: # mysql -u root -p'xxxx' -e "show processlist;" 一般Sleep过多会占用较高CPU等资源 # mysql -u root -p'xxxx' -e "show processlist;" | grep Sleep | wc -l 查看mysql的wait_timeout时长设置: # mysql -u root -p'xxxx' -e "show glob

Web 前端性能优化相关内容解析

Web 前端性能优化相关内容,来源于<Google官方网页载入速度检测工具PageSpeed Insights 使用教程>一文中PageSpeed Insights 的相关说明.大家可以对照着去优化自己的网站或者相关项目.本文由Jeff 整理. 0.提高服务器的响应速度 砸钱的东西,但却最根本:搞好这一项,甚比下面任何一项. 1.优化样式表和脚本的排列顺序 正确地排列外部样式表与外部和内嵌脚本的顺序,可增加下载时同时加载的数据量,并提高浏览器显示网页的速度. 将样式表放在顶部,将脚本放在底部

MySql性能优化相关

原来使用MySql处理的数据量比较少,小打小闹的,没有关注过性能的问题.最近要处理的数据量飙升,每天至少20W行的新增数据,导致MySql在性能方面已经是差到不可用的地步了,必须要重视MySql的优化了. 经验借鉴 在不涉及到join查询的情况下,单个表的体积大于2g的时候,需要进行分表存储(这时表的行数应该在1000W左右,如果包含字符串类型,大约是500W行左右). 单个数据库的表数量要控制到300或400以内(赶集网DBA的说法,还有说控制到128个以内的). 使用InnoDB引擎时,in

Web 前端性能优化相关内容解析[转]

Web 前端性能优化相关内容,来源于<Google官方网页载入速度检测工具PageSpeed Insights 使用教程>一文中PageSpeed Insights 的相关说明.大家可以对照着去优化自己的网站或者相关项目.本文由Jeff 整理. 0.提高服务器的响应速度 砸钱的东西,但却最根本:搞好这一项,甚比下面任何一项. 1.优化样式表和脚本的排列顺序 正确地排列外部样式表与外部和内嵌脚本的顺序,可增加下载时同时加载的数据量,并提高浏览器显示网页的速度. 将样式表放在顶部,将脚本放在底部

关于React性能优化

这几天陆陆续续看了一些关于React性能优化的博客,大部分提到的都是React 15.3新加入的PureComponent ,通过使用这个类来减少React的重复渲染,从而提升页面的性能.使用过React的朋友都知道,React组件只有在state和props发生改变时才会触发render,如果state和props没有发生改变,render就不执行.通常在写页面的时候,如果没有使用PureComponent类,为了避免重复渲染而产生的性能问题,我们会使用shouldComponentUpdat

React性能优化之PureComponent 和 memo使用分析

前言 关于react性能优化,在react 16这个版本,官方推出fiber,在框架层面优化了react性能上面的问题.由于这个太过于庞大,我们今天围绕子自组件更新策略,从两个及其微小的方面来谈react性能优化. 其主要目的就是防止不必要的子组件渲染更新. 子组件何时更新? 首先我们看个例子,父组件如下: import React,{Component} from 'react'; import ComponentSon from './components/ComponentSon'; im

React 性能优化总结

初学者对React可能满怀期待,觉得React可能完爆其它一切框架,甚至不切实际地认为React可能连原生的渲染都能完爆--对框架的狂热确实会出现这样的不切实际的期待.让我们来看看React的官方是怎么说的.React官方文档在Advanced Performanec这一节,这样写道: One of the first questions people ask when considering React for a project is whether their application wi

SQL Server 查询性能优化 相关文章

来自: SQL Server 查询性能优化——堆表.碎片与索引(一) SQL Server 查询性能优化——堆表.碎片与索引(二) SQL Server 查询性能优化——覆盖索引(一) SQL Server 查询性能优化——覆盖索引(二) SQL Server 查询性能优化——创建索引原则(一) SQL Server 查询性能优化——创建索引原则(二) SQL Server 查询性能优化——索引与SARG(一) SQL Server 查询性能优化——索引与SARG(二) SQL Server 查

react性能优化要点

1.减少render方法的调用 1.1继承React.PureComponent(会自动在内部使用shouldComponentUpdate方法对state或props进行浅比较.)或在继承自React.Component类型的组件中使用shouldComponentUpdate方法来决定render方法是否被调用. 使用浅比较时,如果是对象类型就会出问题,因此最好是使用immutable类型.<immutable在性能优化中的作用> 1.2在调用组件时,如果某个属性值是函数,避免使用箭头函数