react性能优化要点

1.减少render方法的调用

1.1继承React.PureComponent(会自动在内部使用shouldComponentUpdate方法对state或props进行浅比较。)或在继承自React.Component类型的组件中使用shouldComponentUpdate方法来决定render方法是否被调用。

使用浅比较时,如果是对象类型就会出问题,因此最好是使用immutable类型。《immutable在性能优化中的作用》

1.2在调用组件时,如果某个属性值是函数,避免使用箭头函数,不然每次比较props中该属性时都是不同的。

<IfEqual  onClick={()=>{}} />

正确的做法是将onClick中的函数定义为组件的一个方法。

class App extends React.Component {
    handleClick = () =>{}
    render() {
        return (
            <IfEqual  onClick={this.handleClick} />
        );
    }
}

1.3 如果是纯函数组件,从16.6起,可以使用React.memo来实现类似PureComponentshouldComponentUpdate的解决方案。

<<详细用法>>

2.避免使用状态提升来共享state,此时应该使用redux解决方案。

因为组件层次太深的话,在祖先组件中setState会导致无数个子孙组件的render方法再次被调用。(如果不是PureComponent或未使用shouldComponentUpdate方法)

<<什么时候该用redux>>,该文章里说明了设么时候会发生状态提升。

3.dom结构的控制

3.1 保持稳定的dom结构,尽量避免dom节点跨层级移动操作。

3.2 使用css来隐藏节点,而不是真的移除或添加DOM节点。

上述两项优化的原因在于:

由于 React  diff算法是逐层比较virtual tree的节点,同一层级的节点只会做如下操作:1.交互位置、2.添加 3.删除(移动也会被当做删除)

如上图,A 节点(包括其子节点)整个被移动到 D 节点下,当比较第二层时发现A节点没有了,删除节点,然后比较D节点,发现D节点有子节点,按如下过程执行:create A -> deleteB -> deleteC -> create B -> create C

原文地址:https://www.cnblogs.com/94pm/p/12019056.html

时间: 2024-10-09 14:15:03

react性能优化要点的相关文章

19个MySQL性能优化要点解析

19个MySQL性能优化要点解析 以下就是跟大家分享的19个MySQL性能优化主要要点,一起学习学习. 1.为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的.因为,我们某些查询语句会让MySQL不使用缓存.请看下面的示例: //

关于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

网页性能优化 要点

性能优化黄金规则 规则1——减少http请求//     (缓存,内联图片,雪碧图,将图片转换为base64编码,合并脚本和样式表) 规则2——使用内容发布网络(CDN)     //将静态内容放在不同的CDN当中,用户请求时将会就近从服务器中加载 规则3——添加Expires头     //设置当前页面的过期日期时间,添加在响应头和请求头当中,Max-Age:缓存的保存时间     304:发送过请求,不过内容是从缓存中取出的 规则4——压缩gzip 规则5——将样式表放在顶部 规则6——将脚

React性能优化相关

React渲染页面包括两个很重要的组成部分: 1.构建虚拟dom 2.根据虚拟dom变化渲染真实dom 对于第二部分来说,我们很难深入到React核心的diff算法等,因此主要从第一部分入手来优化性能. 针对第一部分,从优化角度来说,最直观想到的就是缩短构建虚拟dom的时间.具体到组件层面,就是减少无状态组件的函数执行以及类组件的render. 函数组件: hooks是专门针对函数组件来设计的模式,如果不使用hooks,函数组件便无法保存和管理自己的状态,直白一点理解就是函数每次执行的时候内部的

React性能优化

1.shouldComponentUpdate 一个组件更新时,无论是设置了新的props/调用了setState方法/调用forceUpdate方法,React都会调用该组件所有子组件的render方法.在组件树深度嵌套或render方法十分复杂的页面上这可能会带来延迟. 组件的render方法有时候会在不必要的情况下被调用.如:在组件渲染过程中没有使用props或state值,或组件的props或state并没有在父组件重新渲染时发生改变时,重新渲染这个组件会得到和已存在的虚拟DOM结构一模

React组件性能优化

转自:https://segmentfault.com/a/1190000006100489 React: 一个用于构建用户界面的JAVASCRIPT库. React仅仅专注于UI层:它使用虚拟DOM技术,以保证它UI的高速渲染:它使用单向数据流,因此它数据绑定更加简单:那么它内部是如何保持简单高效的UI渲染呢? React不直接操作DOM,它在内存中维护一个快速响应的DOM描述,render方法返回一个DOM的描述,React能够计算出两个DOM描述的差异,然后更新浏览器中的DOM. 就是说R

react+redux渲染性能优化原理

大家都知道,react的一个痛点就是非父子关系的组件之间的通信,其官方文档对此也并不避讳: For communication between two components that don't have a parent-child relationship, you can set up your own global event system. Subscribe to events in componentDidMount(), unsubscribe in componentWillU