React其它相关知识点

一,解释一下React Fiber

简单来说,核心就是在虚拟dom和浏览器的调用栈之间多了一个虚拟调用栈,和虚拟dom一样,这个虚拟调用栈也是在内存中的,这个虚拟调用栈就类似于一个任务调度器,它可以暂停一个任务,也可以重启一个任务,也可以终止一个任务,还能给任务分配优先级,这样栈的执行顺序就能定制了。React Fiber利用分片的方式,将渲染分割成了多个事务,然后根据每个事务的执行优先级来进行渲染,从而提升渲染计算性能。

二,React性能分析?

1,可以借助 Chrome Devtools 的 Performance 面板

通过观察 Frames(帧)那一栏,会显示对应的fps,如果低于60的,就会有卡顿感,找到了卡顿的点,再去查看Main 那一栏展开,这一栏主要是会列出JS的调用栈,然后就能看到对应的执行时间,找到执行较慢的函数,从而定位到问题。

2,可以利用React devtools

React 16.5版本引入了Profiler功能,通过Record来分析一段组件更新的数据,主要是监测的React组件commit阶段,借助rank视图或者火焰图来观察组件状态更新时的渲染时间以及是否存在渲染浪费。

(React 16以后,组件渲染分为render阶段和commit阶段,render阶段决定了需要进行哪些变更,比如DOM,这个阶段会调用render函数;而commit阶段主要就是执行一些diff出来的变更请求,比如DOM的插入、更新、删除等,还会调用didmount、didupdate等生命周期函数)

三,React错误捕获?

React提出了一个错误边界的概念,就是在组件最外层包一个捕获错误的组件,只要组件里定义了static getDerivedStateFromError或者componentDidCatch方法,两个中的一个,当子组件有错误抛出时,就会进行捕获。

四,为什么操作DOM很耗性能?

不一定。

以Chrome为例,DOM对象是使用C++开发的,而通过V8 binding,在V8引擎内会有一个和DOM对象对应的JS对象,我们称之为Wrapper objects(包装对象),操作DOM其实就跟操作JS对象一样。

如果只是修改document的一个属性,其实速度和修改对象的一个属性一样,但是如果是修改像document.title,那就不一样了,这等于是修改了原生DOM对象的属性了,所以这时候的性能损耗,其实就是用在JS对象和DOM对象的转换和同步上面。

还有就是重排和重绘,

五,聊一聊diff算法

传统的diff策略是循环递归所有的节点,进行依次对比,复杂度是O (n ^ 3)

react diff策略三点:

1,tree diff

Web UI中DOM节点跨层级的移动操作特别少,因此两棵树只会比较同一层级的节点

2,component diff

拥有相同类的两个组件会产生相似的树形结构,如果类不同,则默认不同

3,element diff

对于同一层级的一组子节点,可以通过唯一id进行区分,也就是设置唯一key进行优化

React其它相关知识点的更多相关文章

  1. React及Nextjs相关知识点小结

    React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...

  2. React Test相关资料

    karma 前端测试驱动器,生产测试报告,多个浏览器 mocha js的测试框架,相当于junit chai,单元测试的断言库,提供expect shudl assert enzyme sinon.j ...

  3. UITableView相关知识点

    //*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...

  4. Android开发涉及有点概念&相关知识点(待写)

    前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...

  5. IOS开发涉及有点概念&相关知识点

    前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...

  6. IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结

    添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...

  7. 学习记录013-NFS相关知识点

    一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...

  8. TCP/IP 相关知识点与面试题集

    第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...

  9. Python开发一个csv比较功能相关知识点汇总及demo

    Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...

随机推荐

  1. 一个Java方法能使用多少个参数?

    我最近给我fork的项目QuickTheories增加了一个接口: @FunctionalInterface public interface QuadFunction<A, B, C, D, ...

  2. 003_对go语言中的工作池代码练习的一些思考和改进

    在进行工作池的代码练习时候,我发现了一个有趣的事情,首先看下面一段代码: package main import "fmt" import "time" fun ...

  3. 团队项目-记账App

    一.团队成员介绍 队长: 向瑜 博客园地址: https://www.cnblogs.com/xiangyu721/  沟通能力较强,善于总结,能够正确分配团队任务.其次,有耐心学习新事物,发现新问题 ...

  4. JS 窗口加载与定时器笔记

    bom浏览器对象模型     bom由一系列相关的对象构成并且每个对象都提供了很多方法属性     bom顶级对象是window     bom是浏览器产商在各自浏览器上定义的,兼容性差     wi ...

  5. MyBatis深入理解参数

    目录 一.快速创建mapper文件 二.parameterType 三.MyBatis 传递参数 1. 一个简单参数(掌握) 一.快速创建mapper文件 由于每个接口都要创建一个对应的mapper文 ...

  6. 2020-04-22:谈谈JDK1.8下的HashMap在并发情况下链表成环的过程。(挖)

    福哥答案2020-04-22: jdk1.8下的hashmap采用的是尾插法,不会有链表成环的问题.jdk1.7下采用的头插***有链表成环的问题. hashmap成环原因的代码出现在transfer ...

  7. 攻防世界-web(进阶)-NewsCenter

    打开文件发现有个搜索框,考虑是XSS或SQL注入,输入弹框语句不显示考虑到SQL注入,抓包将抓包信息保存为txt,用sqlmap爆破. 输入:sqlmap -r “sql.txt”,输出如下数据库版本 ...

  8. Qt开发技术:QCharts(三)QCharts样条曲线图介绍、Demo以及代码详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  9. VMware Workstation 15 Pro安装带图形化界面的CentOS7

    1.双击打开“VMware Workstation”,然后选择“创建新的虚拟机” 2.在安装向导中,选择“稍后安装操作系统”,然后点击“下一步”继续安装 3.在“客户机操作系统”中选择“Linux(L ...

  10. C语言文件读写命令fprintf和fscanf

    以向文件中读取和写入二维数组为例. 以下是fprintf的使用:向文件中写入10*10的二维数组,数组元素为1~100之间的随机数. #include <stdlib.h> #includ ...