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

浏览器【详解】requestIdleCallback(浏览器空闲时执行)

简介

requestIdleCallback 是浏览器的一个 API,用于在浏览器空闲时间执行低优先级任务,避免阻塞主线程,提升页面性能和响应速度。

当浏览器完成了关键任务(如渲染、布局、用户交互处理)且暂时没有更高优先级的工作时,会处于 “空闲状态”。requestIdleCallback 允许开发者利用这段空闲时间执行非紧急任务(如日志上报、数据预处理、缓存清理等),而不影响页面的流畅性。

应用场景

  • 日志上报:非紧急的用户行为日志、性能数据等。
  • 数据预加载:提前加载可能需要的数据(非首屏必需)。
  • 缓存清理:本地存储(localStorage)的过期数据清理。
  • 统计分析:页面停留时间、元素曝光等非实时计算。

不适合的场景

  • 紧急任务:如用户输入后的即时反馈、动画帧更新(应使用 requestAnimationFrame)。
  • 长时间任务:单个任务执行时间过长(超过 timeRemaining()),需拆分后分批执行。
  • DOM 操作密集型任务:可能触发重排重绘,建议放在 requestAnimationFrame 中。

语法

// 定义要在空闲时执行的任务
function idleTask(deadline) {// deadline 对象包含:// - timeRemaining():返回当前空闲时间的剩余毫秒数(动态更新)// - didTimeout:布尔值,表示任务是否因超时执行// 只要有剩余时间且任务未完成,就继续执行while (deadline.timeRemaining() > 0 && 还有任务要做) {console.log('执行空闲任务...');// 执行部分任务(避免长时间占用线程)}// 如果任务未完成,请求下一次空闲时间继续执行if (还有任务要做) {requestIdleCallback(idleTask);}
}// 注册空闲任务(第二个参数可选,设置超时时间)
requestIdleCallback(idleTask, { timeout: 5000 }); 
// 超时时间:若5秒内没有空闲时间,强制执行任务
  • 每次执行时间受 timeRemaining() 限制(通常不超过 50ms),防止任务过长阻塞主线程。
  • 通过 timeout 选项确保任务最终会被执行(即使浏览器一直忙碌)。
http://www.dtcms.com/a/309334.html

相关文章:

  • CS224n:Word Vectors and Word Senses(二)
  • LOVON——面向足式Open-Vocabulary的VLN导航:LLM做任务分解、YOLO11做目标检测,最后L2MM将指令和视觉映射为动作,且解决动态模糊
  • 九联UNT403HS_海思MV320处理器_安卓9-优盘强刷刷机包
  • 从内部保护你的网络
  • Android ConstraintLayout 使用详解
  • CAN总线协议
  • 【机器学习与数据挖掘实战 | 医疗】案例20:基于交叉验证和LightGBM算法的糖尿病遗传风险预测
  • FastDDS (SharedMemory)
  • Mysql监控数据库
  • synchronized 深度剖析:从语法到锁升级的完整演进
  • VSCode:通义灵码插件安装使用 -- 免费AI编程工具
  • 登录校验一
  • 抢占先机,PostgreSQL 中级专家认证的职业跃迁
  • 逻辑回归在银行贷款审批中的应用:参数选择与实践
  • grafana/lock-stack 日志 Pipeline 配置
  • 性能监控体系:InfluxDB Grafana Prometheus
  • 【东枫科技】DreamHAT+
  • 3D 建模核心术语扫盲:拓扑、UV 展开、烘焙与 AO 贴图解析
  • 关于“PromptPilot” 之5 -标签词与标签动作的语言模型九宫格
  • c#中switch case语句的用法
  • Go语言的gRPC教程-拦截器
  • 向华为学习——IPD流程体系之IPD术语
  • 译 | BBC Studios团队:贝叶斯合成控制方法SCM的应用案例
  • k8s云原生rook-ceph pvc快照与恢复(上)
  • JavaScriptAJAX异步请求:XHR、Fetch与Axios对比
  • 学习笔记:封装和单继承
  • ls hgfs提示ls: cannot access ‘hgfs‘: Permission denied
  • Spring Boot 2.1.18 集成 Elasticsearch 6.6.2 实战指南
  • OneCode3.0 DSM:领域驱动设计驱动下的自定义枚举领域划分实践
  • CMake Debug/Release配置生成器表达式解析