react15与react16的本质区别

这篇具有很好参考价值的文章主要介绍了react15与react16的本质区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

React 15 和 React 16 在架构和一些核心特性上存在本质性的区别。

1.Reconciliation(协调)算法:

  • React 15: React 15 使用了递归的协调算法,即采用深度优先遍历整个组件树来协调更新。这种方式在处理大型组件树或深度嵌套组件时可能导致性能问题。
  • React 16: React 16 引入了 Fiber 架构,使用了一种更灵活的协调算法。Fiber 架构的核心思想是将协调过程拆分成可中断的小任务单元,允许在渲染过程中中断和恢复,以更好地响应用户输入,提高性能。

React Fiber 架构:

  • React Fiber 架构是 React 16 引入的一种新的协调引擎,它重新设计了 React 的核心算法,提供了更灵活的调度和渲染机制。Fiber 架构的目标是改善 React 在大型应用中的性能,同时提供更好的用户体验和交互响应性。
  • 以下是 React Fiber 架构的一些关键特性和概念:
  • 1. Fiber 节点:在 Fiber 架构中,每个 React 元素都对应一个 Fiber 节点。Fiber 节点是一个轻量的 JavaScript 对象,用于描述 React 元素的信息,例如元素的类型、属性、子元素等。
  • 2. 协调:Fiber 架构引入了新的协调机制,通过协调器(Reconciler)来处理元素的更新和渲染。协调器使用一种深度优先遍历的算法来协调和调度 Fiber 节点,使得 React 能够更加灵活地处理更新和渲染的优先级。
  • 3. Fiber 树:Fiber 架构中的元素被组织成一个 Fiber 树。与传统的递归调度不同,Fiber 树的节点可以在不同时间点暂停、中断和恢复。这使得 React 能够在渲染时对任务进行切片,提高对用户输入的响应速度。
  • 4. 时间片(Time Slicing):Fiber 架构引入了时间片的概念,将任务切分成小的时间片单元。这使得浏览器能够在每个时间片之间进行中断,执行其他任务,提高页面的交互响应性。
  • 5. 异步渲染: Fiber 架构支持异步渲染,可以将渲染工作分散到多个帧中,避免一次性渲染大量元素导致的卡顿。异步渲染使得 React 能够更好地适应复杂的应用场景,提高了整体的性能。
  • 6. 优先级调度: Fiber 架构引入了优先级调度的概念,通过任务的优先级来决定任务的执行顺序。这允许 React 在处理高优先级任务时能够更快地响应用户输入,同时在处理低优先级任务时避免阻塞主线程。
  • 7. 增量渲染:Fiber 架构支持增量渲染,可以在每个时间片中只更新发生变化的部分,而不是整体重新渲染。这减少了不必要的计算和 DOM 操作,提高了渲染的效率。
  • 总的来说,React Fiber 架构是为了解决在大型应用中渲染性能和用户体验问题而引入的。它通过重新设计协调机制、引入时间片和优先级调度等特性,使得 React 能够更加灵活地处理复杂的更新和渲染任务,提高了整体的性能和响应速度。

时间片:

时间片(Time Slicing)是 React 16 引入的一项特性,旨在提高应用在处理大型任务时的性能和用户体验。时间片将任务分割成小块,使得浏览器能够在每个时间片之间进行中断,从而更好地响应用户输入和保持页面的流畅性。

时间片的主要目标是解决两个问题:

1. 用户交互响应性:在进行大型渲染任务时,如果一直占用主线程,可能会导致页面在渲染完成之前无法响应用户的输入,造成页面卡顿和交互迟滞。

2. 动画和滚动卡顿:当页面中有大量的 DOM 元素需要渲染时,如果一次性渲染所有元素,可能导致动画和滚动的卡顿,影响用户体验。

时间片通过将任务切分成小的时间片单元,允许浏览器在每个时间片之间进行中断,执行其他任务,如处理用户输入或执行高优先级的代码。这样,即使有大型任务在进行,浏览器也能够更及时地响应用户的输入和保持页面的流畅性。

时间片的作用包括:

1. 更好的用户体验:通过将渲染任务分解成小块,可以更好地响应用户输入,提高页面的交互响应性。

2. 减轻主线程压力: 时间片允许浏览器在每个时间片之间进行中断,执行其他任务,减轻了主线程的压力,提高了页面的性能。

3. 避免卡顿:在动画和滚动等场景下,时间片的引入可以避免一次性渲染大量元素导致的卡顿问题,提高了流畅度。

那是不是就说明react15是单线程,react16是多线程的呢?

不是:

React 15 及之前的版本是单线程的,它使用了浏览器的事件循环(event loop)来处理用户交互和更新渲染。在 React 15 中,更新是通过递归方式同步执行的,一旦开始更新,就会一直递归遍历组件树,直到所有组件都完成渲染。这样的机制可能会导致在更新较大的组件树时,主线程被长时间占用,造成页面卡顿。

React 16 及 React 17 引入了 Scheduler 模块和异步渲染的概念,但仍然是在主线程上执行的。这并不是说 React 变成了多线程框架,而是通过优先级调度和异步渲染的方式,更好地利用了主线程的时间片,提高了对用户交互的响应速度,减少了卡顿的可能性。

2.React Fiber 架构:

  • React 15: 使用了递归更新的方式,可能在大型应用或复杂更新场景下性能受限。
  • React 16: 引入了 Fiber 架构,提供了更灵活的调度和渲染机制,支持时间片切割、异步渲染、增量渲染等特性,以提高性能和用户体验。

3.React Portals:

  • React 15: 不支持 React Portals,这是 React 16 引入的一项新特性,允许将子组件渲染到 DOM 结构中的不同位置。
  • React 16: 引入了 createPortal API,使得开发者可以在组件树之外渲染子组件,从而更灵活地管理组件的渲染位置。

这些改进使得 React 在性能、可维护性和用户体验方面都取得了显著的提升。文章来源地址https://www.toymoban.com/news/detail-800933.html

到了这里,关于react15与react16的本质区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • typeof 在TypeScript中和JavaScript中的区别

            在TypeScript中和JavaScript中都有typeOf,但是作用用法却大有不同。 一、typeof用来判断数据类型返回结果: 基本数据类型:string,number,boolean,undefined 引用数据类型:object (不管是什么引用类型就返回object),function 二、typeof判断变量是否存在         ts中的typeof可

    2024年02月09日
    浏览(39)
  • 面试题-TS(一):TypeScript是什么?它与JavaScript有什么区别?

    面试题-TS(一):TypeScript是什么?它与JavaScript有什么区别? TypeScript是一种编程语言,它是JavaScript的超集。它通过添加静态类型、类、接口和模块等功能来扩展JavaScript。 JavaScript是一种广泛应用于Web开发的脚本语言,它的灵活性和易用性使得它成为了开发者们的首选。然而,Jav

    2024年02月15日
    浏览(36)
  • JavaScript、TypeScript、ES5、ES6之间的联系和区别

    ECMAScript:  一个由 ECMA International 进行标准化,TC39 委员会进行监督的语言。通常用于指代标准本身。 JavaScript:  ECMAScript 标准的各种实现的最常用称呼。这个术语并不局限于某个特定版本的 ECMAScript 规范,并且可能被用于任何不同程度的任意版本的 ECMAScript 的实现。 ECMAS

    2024年02月13日
    浏览(32)
  • 前端经典面试题 | 吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解

    🖥️ 前端经典面试题 专栏:吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉 你的一键三连是我更新的最大动力❤️ 目录 一、回答

    2024年01月17日
    浏览(37)
  • 从javascript到vue再到react:前端开发框架的演变

    目录 JavaScript: 动态语言的基础 JavaScript:Web开发的起点 Vue.js: 渐进式框架的兴起 Vue.js:简洁、高效的前端框架 React.js: 声明式UI的革新 React.js:强大、灵活的前端框架 演变之路与未来展望 演变过程 当提到前端开发中的框架时,JavaScript、Vue.js和React.js是三个最常见的名词。它

    2024年02月07日
    浏览(41)
  • 2023年最新前端面试题汇总大全二(含答案超详细,Vue,TypeScript,React,微信小程序,Webpack 汇总篇)-- 持续更新

    HTML篇 CSS篇 JS篇 Vue篇 TpeScript篇 React篇 微信小程序篇 前端面试题汇总大全(含答案超详细,HTML,JS,CSS汇总篇)-- 持续更新 1. 谈谈你对MVVM开发模式的理解? MVVM是一种简化用户界面的 实践驱动编程方式 。在当前主流的前后端分离的开发模式中,MVVM模式的优越性日益体现,相较

    2024年02月10日
    浏览(44)
  • 【解决方案】使用WebStorm运行TypeScript文件(基于ts-node)

    本文章内 所有WS代表WebStorm; 所有TS代表TypeScript。 首先呢,我也算是TS的初学者。相信作为过来人都清楚,新手刚刚上手TS的时候,配置环境是多么痛苦的一件事情。并且,我就很好奇,为什么网上教程、参考文档、甚至专业书籍,铺天盖地都是使用的是VScode编写的。(难道

    2024年02月09日
    浏览(37)
  • 服务端使用ASP.NET Core SignalR与Vue3(TypeScript与JavaScript)前端建立通信(以进度条为例)

    1. ASP.NET Core           ASP.NET Core 是一个跨平台、高性能及开源的框架,用于生成基于云且连接互联网的新式应用程式。 官方文档:ASP.NET documentation | Microsoft Learn  2.  ASP.NET Core SignalR         ASP.NET Core SignalR 是开源库,用于服务端与客户端建立实时通信,可以自动管理连接

    2024年02月06日
    浏览(36)
  • 【前端知识】JavaScript——var 与 let 的区别

    var声明的变量会自动提升到函数作用域顶部,而let不会。 在解析代码时,JavaScript 引擎会注意出现在块后面的 let 声明,只不过在此之前不能以任何方式来引用未声明的变量。在 let 声明之前的执行瞬间被称为 暂时性死区(temporal dead zone) ,在此阶段引用任何后面才声明的变

    2024年02月16日
    浏览(34)
  • [HTML]Web前端开发技术15(HTML5、CSS3、JavaScript )表格,bordercolorlight,frame,valign,rowspan,colspan——喵喵画网页

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 表格 表格 表格标记 表格标记-语法 表格属性设置 表格边框样式属性 表格单元格间距、单元格边距属

    2024年01月22日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包