当前位置: 首页 > news >正文

对为什么react需要时间分片,vue3不需要的浅学习

1、时间分片

时间分片指在让应用在cpu进行大量计算时也能与用户交互,但时间分片只能对大量cpu计算进行优化,无法优化复杂DOM操作,因为要确保用户正在操作的界面是最新。

web卡顿的场景:

1、cpu计算量不大,但dom操作非常复杂(比如说你向页面插入了十万个节点)。这种场景下不管做不做时间分片,页面都会很卡。

2、cpu计算量非常大。理论上时间分片在这种场景里会有较大收益,但是人机交互研究表明,除了动画场景外,大部分用户不会觉得 10 毫秒和 100 毫秒有很大区别。也就是说,时间分片只在 CPU 需要连续计算 100 毫秒以上的情况下才有较大收益。

2、react需要时间分片

React 16引入了Fiber重构,其目的是为了实现虚拟DOM的优先级级别和中断重新开始的渲染过程,这被称为“时间分片”。Fiber框架通过分层调度、暂停和重用执行树的部分来提高其性能,这样可以在浏览器有时间处理用户交互或动画的时候动态地调度工作。

Fiber的引入为React提供了以下优势:

可中断的渲染- 优先级渲染(比如,用户交互比如滚动优先于动画)- 可复用的渲染(比如,在使用用户界面时可以在后台继续渲染其他部分)

这些优点使得React应用程序能够更加高效地更新用户界面,并且不会导致之前版本的“闪烁”问题。

解决方案:

React 16及以上版本会自动使用Fiber框架,无需用户进行任何操作。如果你正在使用React 15或更早的版本,你需要升级到React 16或更高版本以获得Fiber的好处

import React from 'react';
import ReactDOM from 'react-dom';class MyComponent extends React.Component {// ...render() {// 使用新的Fiber渲染算法渲染组件return (<div>{/* ... */}</div>);}
}ReactDOM.render(<MyComponent />, document.getElementById('root'));

在这个例子中,React 16使用Fiber重构实现了虚拟DOM的更新,使得用户界面的渲染能够被中断和重新开始,从而提高了性能。

2.1关于Fiber框架学习。

参考:https://blog.51cto.com/u_11887782/5782954

3、vue3不需要时间分片

Vue 3 不需要时间分片(time slicing)主要是因为它的核心渲染机制和性能优化策略已经足够高效,能够在大多数情况下提供流畅的用户体验。以下是详细的原因:

3.1、编译器优化

Vue 3 引入了一个全新的编译器,能够生成更高效的渲染函数。这个编译器在编译过程中进行了一系列优化,例如:

  • 静态提升:将不变的节点提升为常量,只在初次渲染时计算一次。
  • 预字符串化:将静态内容直接转化为字符串,减少了运行时的开销。
  • 缓存事件处理程序:避免了不必要的重新绑定。

这些优化措施大大减少了 Vue 3 在更新 DOM 时的计算量,使得渲染过程更加高效。

3.2.、响应式系统的改进

Vue 3 使用了基于代理的响应式系统,替代了 Vue 2 中基于 Object.defineProperty 的实现。新的响应式系统更加高效,具备以下优点:

  • 精细的依赖追踪:只追踪实际使用的属性,避免了不必要的依赖收集。
  • 懒惰计算:仅在需要时才计算依赖,减少了计算量。

这些改进使得 Vue 3 能够更快速地响应数据变化,从而减少了渲染开销。

3.3、虚拟 DOM 和 Diff 算法的优化

Vue 3 对虚拟 DOM 及其 diff 算法进行了优化,使得差异计算更加高效:

  • 静态标记:编译期间标记静态节点,跳过不变的部分。
  • 块级优化:将动态节点分块,只对发生变化的块进行更新。

这些优化措施减少了 DOM 更新的频率和范围,提高了整体渲染性能。

3.4、单次异步队列

Vue 3 的更新机制基于单次异步队列(single asynchronous queue),它确保在同一事件循环中只进行一次批量更新。这种方式减少了不必要的重复计算和 DOM 操作,使得更新过程更加高效。

3.5、自动批处理

Vue 3 实现了自动批处理机制,在同一个事件循环中对多次数据更新进行合并,从而减少了渲染次数。这种机制在避免频繁重绘的同时,保证了界面的流畅性。

3.6、现代浏览器的性能

现代浏览器的性能已经得到了极大的提升,尤其是在处理 JavaScript 和 DOM 操作方面。Vue 3 的优化能够充分利用这些性能改进,从而在绝大多数情况下不需要时间分片。

3.7总结

Vue 3 通过编译器优化、响应式系统改进、虚拟 DOM 和 Diff 算法优化、单次异步队列、自动批处理等技术手段,大幅提升了渲染效率和性能。再加上现代浏览器的性能提升,使得 Vue 3 能够在大多数情况下提供流畅的用户体验,而无需借助时间分片等复杂的技术。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • iPhone删除所有照片的高效三部曲
  • vitest 单元测试应用与配置
  • [Spring] Spring Web MVC基础理论
  • Memcached负载均衡:揭秘高效缓存分发策略
  • 基于Flask+Apache+WSGI等模块配置Deep Learning应用功能网站(Ubuntu 22.04服务器)
  • Linux 安装 Docker Compose
  • 百度文心4.0 Turbo开放,领跑国内AI大模型赛道!
  • 【RNN练习】天气预测
  • C# Winform 系统方案目录的管理开发
  • Go语言map并发安全,互斥锁和读写锁谁更优?
  • 【区分vue2和vue3下的element UI Collapse 折叠面板组件,分别详细介绍属性,事件,方法如何使用,并举例】
  • Linux上如何安装ffmpeg视频处理软件
  • ChatGPT对话:如何制作静态网页?
  • 数据结构4.0——串的定义和基本操作
  • ConditionalOnResource注解使用介绍、应用场景以及示例代码
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Apache Spark Streaming 使用实例
  • leetcode-27. Remove Element
  • python3 使用 asyncio 代替线程
  • 程序员该如何有效的找工作?
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 开发基于以太坊智能合约的DApp
  • 正则表达式
  • 正则学习笔记
  • Linux权限管理(week1_day5)--技术流ken
  • ​决定德拉瓦州地区版图的关键历史事件
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (3)(3.5) 遥测无线电区域条例
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (七)Activiti-modeler中文支持
  • (七)Java对象在Hibernate持久化层的状态
  • (三)SvelteKit教程:layout 文件
  • (十八)Flink CEP 详解
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .cfg\.dat\.mak(持续补充)
  • .describe() python_Python-Win32com-Excel
  • .NET Core Web APi类库如何内嵌运行?
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET中GET与SET的用法
  • @Bean注解详解
  • @hook扩展分析
  • @ResponseBody
  • @synthesize和@dynamic分别有什么作用?
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [ABC275A] Find Takahashi 题解
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [C++] 轻熟类和对象
  • [C++数据结构之看懂就这一篇]图(上)
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [CQOI 2011]动态逆序对
  • [HNOI2008]Cards