什么是requestIdleCallback?和requestAnimationFrame有什么区别?

什么是requestIdleCallback?

我们都知道React 16实现了新的调度策略(Fiber), 新的调度策略提到的异步、可中断,其实就是基于浏览器的 requestIdleCallback和requestAnimationFrame两个API。


在 JavaScript 中,requestIdleCallback 是一个用于执行回调函数的 API,该回调函数会在浏览器空闲时执行,而不会影响页面的性能和用户体验。它的作用是在浏览器的空闲时段执行任务,以确保这些任务不会阻塞主线程,从而提高页面的响应性。

具体来说,requestIdleCallback 可以用于执行一些不那么紧急的任务,比如:

  1. 执行复杂的计算: 如果有一些需要较长时间才能完成的计算任务,可以使用 requestIdleCallback 将其放在空闲时执行,而不会阻塞用户与页面的交互。

  2. 后台数据同步: 可以在空闲时检查是否有需要同步的数据,并进行相应的后台同步操作。

  3. 图片懒加载: 对于页面上一些不太重要的图片,可以在空闲时加载,而不影响首屏渲染。

下面是一个简单的示例:

// 在空闲时执行任务
requestIdleCallback(function (deadline) {while (deadline.timeRemaining() > 0) {// 执行一些任务// ...}
});

deadline 是一个对象,用于提供当前帧的一些信息,而 deadline.timeRemaining() 是一个函数,用于获取当前帧还剩余的时间。

具体来说,deadline.timeRemaining() 返回一个表示当前帧剩余时间的毫秒数。在回调函数执行期间,可以多次调用这个函数,以检查当前帧是否还有足够的时间来执行任务。


requestIdleCallback 的第二个参数是一个 options 对象,用于配置回调函数的行为。这个对象有以下属性:

  1. timeout (可选): 用于指定回调函数执行的最大时间。如果在指定的时间内回调函数没有完成,它仍然会在空闲时执行,但是会提前终止。这可以用来确保回调函数在有限的时间内完成,以避免长时间运行的任务影响用户体验。这个值是一个毫秒数。
requestIdleCallback(function (deadline) {// 执行任务},{ timeout: 1000 } // 设置最大执行时间为 1000 毫秒
);
  1. signal (可选): 这是一个 AbortSignal 对象,可以用来取消回调函数的执行。当传递了这个参数时,如果 AbortSignal 被触发,回调函数会被取消。
const controller = new AbortController();
const signal = controller.signal;// 启动回调函数
requestIdleCallback(function (deadline) {// 执行任务},{ signal }
);// 在需要的时候取消
controller.abort();

这两个参数提供了对回调函数执行的一些控制和限制。在实际使用时,可以根据任务的性质和需求进行配置。

需要注意的是,requestIdleCallback 并不是所有浏览器都支持的标准 API,可能需要进行兼容性处理。另外,由于浏览器对空闲时段的定义可能不同,因此在实际使用时,应该根据具体情况进行测试和调整。最新的浏览器也提供了 requestAnimationFramerequestAnimationFrame 方法来执行类似的任务。

requestAnimationFrame和requestIdleCallback是宏任务还是微任务?

大家都知道异步任务分为宏任务和微任务,要搞清楚 requestAnimationFrame requestIdleCallback 是宏任务还是微任务就必须要搞清楚下面几个问题:

  • 浏览器在每一轮Event Loop事件循环中都会去渲染屏幕吗?
  • requestAnimationFrame在哪个阶段执行,是在渲染前还是渲染后?是在微任务执行前还是执行后?
  • requestIdleCallback在哪个阶段执行,是在渲染前还是渲染后?是在微任务执行前还是执行后?
console.log(22)
requestIdleCallback(()=>{console.log(11)
})console.log(33)
requestAnimationFrame(()=>{console.log("动画")
})

在这里插入图片描述


requestAnimationFrame和requestIdleCallback是和宏任务性质一样的任务,只是他们的执行时机不同而已。也有人说它们既不是宏任务也不是微任务,其实我们不必纠结这个,我们所要做的就是知道他们的执行时机就好。
浏览器在每一轮Event Loop事件循环中不一定会去重新渲染屏幕,会根据浏览器刷新率以及页面性能或是否后台运行等因素判断的,浏览器的每一帧是比较固定的,会尽量保持60Hz的刷新率运行,每一帧中间可能会进行多轮事件循环。

  • requestAnimationFrame回调的执行与task和microtask无关,而是与浏览器是否渲染相关联的。它是在浏览器渲染前,在微任务执行后执行。
  • requestIdleCallback是在浏览器渲染后有空闲时间时执行,如果requestIdleCallback设置了第二个参数timeout,则会在超时后的下一帧强制执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/205932.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法通关第十七关黄金挑战——透析跳跃问题

大家好,我是怒码少年小码。 本篇是贪心思想的跳跃问题专题,跳跃问题出现的频率很高。 跳跃游戏 LeetCode 55:给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。 …

【数据结构】——排序

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

【网络奇遇之旅】:那年我与计算机网络的初相遇

🎥 屿小夏 : 个人主页 🔥个人专栏 : 计算机网络 🌄 莫道桑榆晚,为霞尚满天! 文章目录 一. 前言二. 计算机网络的定义三. 计算机网络的功能3.1 资源共享3.2 通信功能3.3 其他功能 四. 计算机网络…

Mysql 递归查询子类Id的所有父类Id

文章目录 问题描述先看结果表结构展示实现递归查询集合查询结果修复数据 问题描述 最近开发过程中遇到一个问题,每次添加代理关系都要去递归查询一下它在不在这个代理关系树上.很麻烦也很浪费资源.想着把代理关系的父类全部存起来 先看结果 表结构展示 表名(t_agent_user_rela…

如何把ipa文件(iOS安装包)安装到iPhone手机上? 附方法汇总

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 技术细节 目录 Appuploader 常见错误及解决方法 苹果APP安装包ipa如何安装在手机上?很多人不知道怎么把ipa文件安装到手机上,这里就整理了苹果APP安装到iOS设备上的方式,仅供参考 苹…

Linux基础指令

1.ls指令 【语法】ls 目录/普通文件 对于目录,列出目录中的所有文件对于普通文件,列出文件的基本属性 选项: -l 详细列出文件的属性-a 列出当前目录下的文件和隐藏文件-i 显示文件的索引信息-R 以递归的方式显示目录下的文件 1.1 [ls -l…

sql注入靶场

第一关: 输入:http://127.0.0.1/sqli-labs-master/Less-1/?id1 http://127.0.0.1/sqli-labs-master/Less-1/?id1%27 http://127.0.0.1/sqli-labs-master/Less-1/?id1%27-- 使用--来闭合单引号,证明此处存在字符型的SQL注入。 使用order …

《程序员考公指南》:零基础到上岸的完整攻略 | 开源日报 No.82

mastodon/mastodon Stars: 44.2k License: AGPL-3.0 Mastodon 是一个免费、开源的社交网络服务器,基于 ActivityPub。用户可以在 Mastodon 上关注朋友并发现新朋友,并且可以发布链接、图片、文字和视频等内容。所有的 Mastodon 服务器都能互操作成为联邦…

第五届全国高校计算机能力挑战赛-程序设计挑战赛(C语言模拟题)

1、已有定义“int a[10]{1,2},i0;”,下面语句中与“ a[i]a[i1],i;”等价的是()。 A. a[i]a[i1]; B. a[i]a[i]; C. a[i]a[i1]; D. i,a[i-1]a[i]; 2、两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是()。 A. 7和5 …

谁可以从使用 Amazon Lightsail 进行 VPS 托管中受益?

文章作者:Libai 介绍 在当今数字化的环境中,拥有可靠和高效的托管解决方案对于企业和个人来说至关重要。由于其灵活性、可扩展性和成本效益,虚拟专用服务器(VPS)托管已经在市场上获得了巨大的流行。Amazon Lightsail …

ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET

有个11g rac环境,停电维护后,orcl1正常启动了,orcl2启动报错如下 SQL*Plus: Release 11.2.0.4.0 Production on Wed Nov 29 14:04:21 2023 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SYS…

相同的树 单值二叉树 二叉树的最大深度

文章目录 相同的树单值二叉树二叉树的最大深度 相同的树 力扣:100相同的树 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 …

vue3 keep-alive页面切换报错:parentComponent.ctx.deactivate is not a function

问题&#xff1a; <router-view v-slot"{ Component }"><keep-alive ><component :is"Component" v-if"$route.meta.keepAlive" /></keep-alive><component :is"Component" v-if"!$route.meta.keepA…

27.0/多态/对象向上转型/向下转型/抽象类/抽象方法。

目录 27.1为什么使用多态? 27.1.2什么是多态 27.1.3对象多态 27.1.4多态的使用前提 27.2 向上转型 27.3向下转型 (面试题) 27.4抽象类和抽象方法 特点(面试题): 27.1为什么使用多态? 需求1&#xff1a;动物园让我们实现一个功能&#xff1a; 创建一个狗类 &#xff0c;狗…

亚马逊云科技向量数据库助力生成式AI成功落地实践探秘(一) ​

随着大语言模型效果明显提升&#xff0c;其相关的应用不断涌现呈现出越来越火爆的趋势。其中一种比较被广泛关注的技术路线是大语言模型&#xff08;LLM&#xff09;知识召回&#xff08;Knowledge Retrieval&#xff09;的方式&#xff0c;在私域知识问答方面可以很好的弥补通…

5种主流API网关技术选型,yyds!

API网关是微服务项目的重要组成部分&#xff0c;今天来聊聊API网关的技术选型&#xff0c;有理论&#xff0c;有实战。 不 BB&#xff0c;上文章目录&#xff1a; 1 API网关基础 1.1 什么是API网关 API网关是一个服务器&#xff0c;是系统的唯一入口。 从面向对象设计的角度…

Echarts 大屏注册自定义地图解析文件流报错以及坐标显示数值和地图填充以及dataV轮播数据不显示问题解决

效果图: 1、第一种方式 后台接口获取到SVG图片的文件流,postman能够正确解析出文件流,前端调用api时需要设置返回的响应格式为image/svg+xml格式,否则解析失败 拿到文件流后是这样的 <?xml version="1.0" encoding="utf-8"?> <!-- Generato…

连接备份1128

深度学习—分类识别篇&#xff1a;http://tr.daheng-imaging.com/watch/1050636http://tr.daheng-imaging.com/watch/1050636 深度学习—目标检测篇&#xff1a;http://tr.daheng-imaging.com/watch/1101141http://tr.daheng-imaging.com/watch/1101141 深度学习—缺陷分割篇&a…

STM32通讯设计

STM32通讯设计 通讯流程STM32程序 通讯流程 1.使用HT2202芯片配置为主机接收&#xff08;轮询模式&#xff09;。 2.将STM32芯片配置为从机发送&#xff0c;中断模式下发送固定数据。 3.如果HT2202芯片能够收到STM32发送的数据则通讯成功&#xff0c;否则通讯失败。 STM32程序…

mac 聚焦搜索不显示

我是连搜索框都不显示&#xff0c;不是搜索结果显示异常 点右上角的搜索按钮都毫无反应 我检查过快捷键之类的设置&#xff0c;都正常&#xff0c;最后是通过删除文件解决的 cd ~/Library/Preferences/ rm com.apple.Spotlight.plist 重启 mac 参考 Spotlight Search Not W…