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. bzoj 4448 [Scoi2015]情报传递 主席树

    比较套路的题目. 可以发现难点在于某个点的权值动态修改 且我们要维护树上一条路径上的点权>x的个数. 每个点都在动态修改 这意味着我们的只能暴力的去查每个点. 考虑将所有可以动态修改的点变成静态 ...

  2. mybatis plus 更新值为null的字段

    转载请注明出处: 由于mybatis plus调用默认的更新操作方法时,不更新值为空,null或默认值等得属性字段,只更新值为非null,非空非默认值的属性字段. 以下为mybatis plus sa ...

  3. 声明式事务xml Spring

    !--JDBC事务管理器--><bean id="tansactionManager" class="org.springframework.jdbc.dat ...

  4. CentOS7系统管理与运维实战

    CentOS7系统管理与运维实战 下载地址 https://pan.baidu.com/s/1KFHVI-XjGaLMrh39WuhyCw 扫码下面二维码关注公众号回复100007 获取分享码 本书目 ...

  5. Navicat15安装教程

    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12797170.html 一:简介 Navicat是一套快速.可靠的数据库管理工具 ...

  6. CentOS 7.0防火墙设置

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙.1.关闭firewall:systemctl stop firewalld.servicesystemctl ...

  7. Unity目录结构设置

    摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的sett ...

  8. 怎么将PPT文件上传到微信公众号上?

    我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加附件使用“微附件”小程序的教 ...

  9. AlgorithmMan,一套免费的算法演示神器

    概述 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/971 访问.  文章末尾附带GitHub开源下载地址. 0.概述 ...

  10. C#算法设计查找篇之02-二分查找

    二分查找(Binary Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/699 访问. 二分查找也称折半查 ...