zoukankan      html  css  js  c++  java
  • React 性能调优记录(上篇),谷歌performance使用

    最近工作用的是react,2个项目做下来算是入门啦,哈哈 O(∩_∩)O,利用空闲时间精读官方文档在性能一节有很多感悟,想写点东西下来,如果能够帮助到正在看的你,我会很开心

    第一篇讲一下,谷歌浏览器的performance怎么使用,不感兴趣直接看结论的请看下篇 https://www.cnblogs.com/wzcsqaws/p/10870741.html

    刚开始使用performance的时候,感觉特别复杂,不知道点哪里,网上的教程又太复杂了,就想写个简单的,能用就行,没什么厉害的操作

    调试之前首先把代码写好,随便写点复杂的,耗内存的操作,是这这么写的(其实是网上抄的_

        import React,{Component} from 'react'
    
    export class Par extends Component {
        constructor(props){
            super(props)
            this.state={
                name:'',
                age:'',
                person:[],
            }
        }
        onChange = (stateName, stateValue) => {
            this.setState({[stateName]: stateValue});
          }
        composeChange = (name) => {
            let tt = (e) => {
                this.onChange(name, e.target.value)}
            return tt;
          }
        submit(e){
            const {name,age} = this.state
            var arr = [...this.state.person]
            arr.push({name,age})
            this.setState({
                person:arr
            })
        }
    
        render(){
            console.log(this.state.person)
            const {name,age,mm} = this.state
            return(
                <div>
                    <span>name:</span><input value={name} name='name' type="text" onChange={this.composeChange('name')}/>
                    <span>age:</span><input value={age} name='age' type="text" onChange={this.composeChange('age')}/>
                    <button onClick={this.submit.bind(this)}>确认</button>
                    <div>
                       { this.state.person.map((e,index)=>(
                            <Child key={index} name={e.name} age={e.age}></Child>
                            ))
                    }
                    </div>
                </div>
            )
        }
    }
    
    class Child  extends Component {   
        componentWillReceiveProps(newProps){
               console.log(`我新的props的name是${newProps.name},age是${newProps.age}。我以前的props的name是${this.props.name},age是${this.props.age}是我要re-render了`);
               }   
        render(){                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
        return (
            <div>
                <span> 姓名:  </span>
                <span>{this.props.name}</span>
                <span> 年龄:  </span>
                <span>{this.props.age}</span>
            </div>
        )
        } 
    }
    

    copy下来直接运行,这么简单的代码,相信大家都看的懂,就是利用props改变,所有子组件跟着改变来进行损耗性能的操作

    看图,随便写点东西,然后一直点确认,因为子组件越来越多也就渲染越来越慢,这时就可以用上performance了

    第一步


    选择performance 然后cpu选择4x slowdown(就是控制cpu的运行速度好让你更方便的测试性能)

    第二步


    点击这个灰色按钮就可以跑了,然后你就赶紧进行你的耗时操作吧(我这里就是疯狂点确认),点6、7秒就可以点中间的stop了,这步我就不截图了

    第三步,终于开始查看了


    Screenshots是选择是否显示当前页面的缩小版,Memory是查看你的当前内存使用情况


    图片上标注的 1 2 3分别讲解

    • 第一部分
      有个时间条,告诉你什么时候你在进行什么操作(大家都知道,我他妈是在说废话吧),
      黄色的代表js操作,越大自然就表示执行的时候吃性能
      红色的线条表示警告,已经超负荷了,红色越深,性能越慢,可能会出现卡顿等现象,如果观察仔细可以发现一开始是没有红线的,因为子组件少,渲染的次数也少些,自然不是那么耗性能
    • 第二部分
      用户的耗时操作会记录在里面,点开看看,你会发现里面有几个你熟悉的react方法
    • 第三部分 你进行的操作

      点击有右上角有红色的三角的一行,下面就会跟着变化,可以看出是这个componentWillReceiveProps生命周期特别耗性能,我们还可以在最右边点击文件打开看一下到底是哪里特别慢

    结论

    可以发现componentWillReceiveProps这个生命使用了之后特别特别特别消耗性能,当你把这个生命周期注释后,再多次执行,红色的警告会在6、7倍的子组件数量的时候才会出现
    所以以后在代码中尽量不要写componentWillReceiveProps哦。这只是一个性能的发现,更多的性能调优的发现请看第二篇

  • 相关阅读:
    SQL SERVER 查询数据库状态
    SQL SERVER 查看数据库执行过哪些语句(SQL历史语句记录)
    SQL SERVER 查看所有触发器
    Delphi XE 错误提示:[DCC Error] E2597...
    SQL SERVER 关于多层嵌套的方法
    Delphi XE System.UITypes 颜色模块 TAlphaColor
    Delphi XE 安卓Web开发 错误:net::ERR_CLEARTEXT_NOT_PERMITTED
    Delphi 错误提示:delphi Unable to create process:请求的操作需要提升
    医学-药物-抗组胺药-依巴斯汀片
    医学-药物-未分类-藿胆滴丸
  • 原文地址:https://www.cnblogs.com/wzcsqaws/p/10869788.html
Copyright © 2011-2022 走看看