React其它相关知识点
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其它相关知识点的更多相关文章
- React及Nextjs相关知识点小结
React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...
- React Test相关资料
karma 前端测试驱动器,生产测试报告,多个浏览器 mocha js的测试框架,相当于junit chai,单元测试的断言库,提供expect shudl assert enzyme sinon.j ...
- UITableView相关知识点
//*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...
- Android开发涉及有点概念&相关知识点(待写)
前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...
- IOS开发涉及有点概念&相关知识点
前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...
- IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结
添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...
- 学习记录013-NFS相关知识点
一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...
- TCP/IP 相关知识点与面试题集
第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...
- Python开发一个csv比较功能相关知识点汇总及demo
Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...
随机推荐
- win10下visual studio code安装及mingw C/C++编译器配置,launch.json和task.json文件的配置
快一年了,我竟然还有脸回来..... 过去一年,由于毕设.找工作的原因,发生太多变故,所以一直没更(最主要的原因还是毅力不够...),至于发生了什么事,以后想说的时候再更吧..依然是小白,下面说正事. ...
- ThreadLocal面试六连问
转自:码农沉思录 中高级阶段开发者出去面试,应该躲不开ThreadLocal相关问题,本文就常见问题做出一些解答,欢迎留言探讨. ThreadLocal为Java并发提供了一个新的思路, 它用来存储T ...
- 好用的连接池-HikariCP
在Springboot的发展历程中,默认的DataSource也从Springboot1.x的tomcat连接池到Springboot2.x的HikariCP.关于HikariCP的简单使用在配置多数 ...
- fastjson JSON.toJavaObject() 实体类首字母大写属性无法解析问题
fastjson JSON.toJavaObject() 实体类首字母大写属性无法解析问题
- 00-基础SQL-SELECT语句
DML(数据操作语言,增删查改)DDL(数据定义语言,比如创建.修改或删除数据库对象)DCL(数据控制语言,控制数据库的访问) desc 表名:显示表结构:dual : 伪表 对于日期型数据,做 * ...
- 阿里Canal中间件的初步搭建和使用
一.前言 Binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句(除了数据查询语句)信息.而Binlog格式也有三种,分别为STATEMENT.ROW.MIXED.STATM ...
- CI4框架应用三 - app目录
我们再来看一下项目的app目录结构,这个目录就是我们开发的主目录,项目的配置,代码的编写都在这个目录中. Administrator@PC- MINGW64 /c/wamp64/www/ci4/app ...
- Python 创建用户界面之 PyQt5 的使用
之前给大伙介绍了下 tkinter,有朋友希望小帅b对其它的 Python GUI 框架也说道说道,那么今天就来说说 PyQt5 如何创建用户界面. 很多人学习python,不知道从何学起.很多 ...
- 基于Linux系统geth的安装
转载地址 https://blog.csdn.net/qq_36124194/article/details/83658580 基于Linux系统geth的安装 安装ethereum sudo apt ...
- 一、Spring的基本应用
1.spring导包 导入maven包 <dependencies> <dependency> <groupId>org.springframework</g ...