码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • React 组件性能优化


    目录

    扩展学习资料

    React组件性能探寻【性能分析工具】

    React Profiler API

    React Devtools

    React组件性能优化

    PureComponent

    memo

    自定义事件销毁

    Web Workers API


    扩展学习资料

    React Profiler 博客

    https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html

    英文

    理解火焰图

    Flame Graphs

    React Profiler API

    https://reactjs.org/docs/profiler.html#gatsby-focus-wrapper

    React 优化手段

    https://www.codementor.io/blog/react-optimization-5wiwjnf9hj

    React组件性能探寻【性能分析工具】

    web性能整体分析工具

    Reacr Devtools

    依赖条件(最低要求)

    • React v16.5.0+(开发者模式)
    • React Developer Tools v3.3.2+

    React Profiler API

    不推荐,因为会产生额外的开销

     

    1. // 1.Profiler在'react'包中。
    2. // onRender回调函数返回一系列信息。
    3. export default function App(): ReactElement {
    4. const OnRender: (...params: any)=>void=(...params)=>{
    5. console.log(params)
    6. params = {
    7. id, // 发生提交的 Profiler 树的 “id”
    8. phase, // "mount" (如果组件树刚加载) 或者 "update" (如果它重渲染了)之一
    9. actualDuration, // 本次更新 committed 花费的渲染时间
    10. baseDuration, // 估计不使用 memoization 的情况下渲染整棵子树需要的时间
    11. startTime, // 本次更新中 React 开始渲染的时间
    12. commitTime, // 本次更新中 React committed 的时间
    13. interactions // 属于本次更新的 interactions 的集合
    14. }
    15. }
    16. function onRenderCallback(
    17. ) {
    18. // 合计或记录渲染时间。。。
    19. }
    20. return (
    21. <Profiler id="router" onRender={onRenderCallback}>
    22. <BrowserRouter>
    23. <Route path="/" component={Home} />
    24. BrowserRouter>
    25. Profiler>
    26. )
    27. }

    React Devtools

    1. // 追踪用户行为
    2. // 安装schedule包,yarn add schedule
    3. // 在需要追踪的地方嵌入代码
    4. import { unstable_track as track } from "schedule/track"
    5. export default class Home extends Component {
    6. handleSubmit = e => {
    7. const text = e.target.value.trim()
    8. if (e.which === 13) {
    9. track("Add Tode", performance.now(), () => {
    10. this.props.onSave(text)
    11. if(this.props.newTode) {
    12. this.setState({text:})
    13. }
    14. })
    15. }
    16. }
    17. }

     

    React组件性能优化

    PureComponent

    • Class组件优化工具;
    • 实质是在shouldComponentUpdate方法中进行浅比较

    memo

    • 函数组件优化的工具;
    • 是一个高阶函数,在其内部进行类似shouldComponentUpdate的比较;
    • 可以指定比较函数。

    自定义事件销毁

    • 原生事件销毁->通常在ComponentDidMount中注册一些原生事件(如scroll,resize)
    • 定时器类销毁->开发中常见的定时器类操作

    需在合适的位置(componentWillUnmount)进行销毁,否则易造成内存溢出

    Web Workers API

    • Web Workers 使用后,Web应用程序可以:
      • 在独立于主线程的后台线程中运行一个脚本;
      • 在独立线程中执行费时的处理任务,避免一些耗时的任务阻断用户体验。
    • 通信机制 Web Workers执行完耗时任务后与主线程的通信--postMessage。

    不能操作DOM

     

  • 相关阅读:
    SwiftUI 高级教程之可组合的通用 SwiftUI 视图
    IE浏览器设置兼容性、清除缓存,重置浏览器、Edge浏览器设置兼容性
    RAC_11g重启顺序以及常用管理命令
    chatgpt 4V 识图功能
    「大数据-0」虚拟机VMware安装、配置、使用、创建大数据集群教程
    2023年高校大数据实验室建设及大数据实训平台整体解决方案
    智能合约语言对比:Solidity | Vyper | Move | Rust
    程序员的数学课14 程序的循环:如何利用数学归纳法进行程序开发?
    【Linux安全之iptables的target】
    postgres 空间坐标转换和获取geom中心点
  • 原文地址:https://blog.csdn.net/qq_35729091/article/details/133701383
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号