React-性能优化(不用memo)

React-性能优化(不用memo)

相信大家在使用React时,经常会遇到页面出现重复渲染的情况,有时候,可能渲染的数据不多,从视觉上感觉不到性能的消耗,但是有时候却很尴尬,比如渲染一个可编辑的列表,当列表的行数稍微有点的多的时候,你随便在页面上面更新一下跟列表无关的state,都有可能会导致卡顿一会,这就是页面在渲染的同时,导致列表也重新渲染了,but,我压根就不想它这时候渲染啊?肿么办?
如果熟悉hooks,这时候第一想到的应该是useMemo,没错,套上它,虽然超薄,防护却是杠杠的,只是是不是每次都得套上useMemo才觉得安全呢?这也未必,先去取个经再说,oh no,是取个女儿国国王再说!

  • 下面这段代码,你会发现其中端倪,不想它动,它非要动。。。
import React, { useState } from "react";

const ExpensiveComponent = () => {
  let now = performance.now();
  while (performance.now() - now < 100) {
    // 这是G点,就是需要关注的点!容易乱动的地方
    console.log(performance.now());
  }
  return <p>这是一个让人崩溃的组件</p>;
};
const PerformanceOptimizationsComponent = () => {
  const [color, setColor] = useState("blue");
  return (
    <div>
       <div style={{color}}>my color</div>
       <input type="text" value={color} onChange={(e) => {
         setColor(e.target.value)
       }}/>
       <ExpensiveComponent/>
   </div>
  );
};

Round One 状态下沉

所谓状态下沉,就是把需要更新的状态,下沉到独立的子组件中,这样的话,子组件的状态变更,不会影响到兄弟组件,更不会影响到父组件,既然你不老实,就拔出来,给你套上金刚罩,看你还敢不敢三心二意了。废话不多,上活。

  • 更改后
import React, { useState } from "react";

const Form = () => {
  const [color, setColor] = useState("blue");
  return (
    <>
      <div style={{ color }}>my color</div>
      <input type="text" value={color} onChange={(e) => {
        setColor(e.target.value);
      }}/>
    </>
  );
};

const ExpensiveComponent = () => {
  let now = performance.now();
  while (performance.now() - now < 100) {
    // G点不到,就淡定了。
    console.log(performance.now());
  }
  return <p>这是一个让人崩溃的组件</p>;
};
const PerformanceOptimizationsComponent = () => {
  return (
    <div>
      <Form/>
      <ExpensiveComponent/>
    </div>
  );
};
export default PerformanceOptimizationsComponent;

Round Two 内容提升

当一部分state在高开销树的上层代码中使用时上述解法就无法奏效了。举个栗子,如果我们将color放到父元素div中。
----:靠,这比新冠变异变的还快,放开还是管控?

import React, { useState } from "react";

const ExpensiveComponent = () => {
  let now = performance.now();
  while (performance.now() - now < 100) {
    // 直接举手投降 
    console.log(performance.now());
  }
  return <p>这是一个让人崩溃的组件</p>;
};
const PerformanceOptimizationsComponent = () => {
  const [color, setColor] = useState("blue");
  return (
   <div style={{color}}>
       <div>my color</div>
       <input type="text" value={color} onChange={(e) => {
         setColor(e.target.value)
       }}/>
       <ExpensiveComponent/>
   </div>
  );
};
export default PerformanceOptimizationsComponent;
  • last 修改后
import React, { useState } from "react";

const ExpensiveTree = () => {
  let now = performance.now();
  while (performance.now() - now < 100) {
    // 再来一次!
    console.log(performance.now());
  }
  return <p>放过我吧!~</p>;
};

const Last = ({ children }) => {
  const [color, setColor] = useState("blue");
  return (
    <div style={{ color }}>
      <div>my color</div>
      <input type="text" value={color} onChange={(e) => {
        setColor(e.target.value);
      }}/>
      {children}
    </div>
  );
};
const PerformanceOptimizationsComponent = () => {
  return (
    <Last>
      <ExpensiveTree/>
    </Last>
  );
};

export default PerformanceOptimizationsComponent;

貌似没用上memo,也解决了这些令人蛋疼的事情!~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
React H5的性能优化是开发过程中非常重要的一部分,下面是一些常见的优化策略: 1. 使用React.memo()来优化组件渲染:React.memo()可以将组件包裹起来,以减少不必要的渲染。它会对组件的 props 进行浅比较,如果 props 没有变化,则不会重新渲染组件。 2. 使用shouldComponentUpdate()或React.PureComponent来避免不必要的渲染:这些方法可以在组件更新之前进行比较,如果 props 或 state 没有变化,则可以阻止组件重新渲染。 3. 避免在render()方法中进行昂贵的计算或操作:render()方法应该只负责渲染组件,不应该包含复杂的计算逻辑或操作。 4. 使用React.lazy()和React.Suspense来实现按需加载:将大型组件拆分为多个小组件,并使用React.lazy()和React.Suspense实现按需加载,可以减少初始加载时间。 5. 使用Key属性来优化列表渲染:在使用map()方法渲染列表时,为每个子元素添加唯一的key属性,这样React可以更高效地更新列表。 6. 使用shouldComponentUpdate()或React.memo()来减少子组件的重新渲染:如果子组件的props没有变化,则可以通过shouldComponentUpdate()或React.memo()阻止子组件的重新渲染。 7. 使用虚拟化技术来优化大型列表的渲染:使用React-virtualized或react-window等库可以只渲染可见区域内的列表项,以提高性能。 8. 使用性能分析工具来找出性能瓶颈:使用React DevTools或Chrome DevTools等工具可以帮助你分析组件的渲染性能,找出潜在的性能问题。 以上是一些常见的React H5性能优化策略,你可以根据具体情况选择合适的方法来提升应用的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值