首页 > 其他分享 >UI 阻塞行为:微任务与宏任务

UI 阻塞行为:微任务与宏任务

时间:2024-09-21 16:14:12浏览次数:6  
标签:执行 队列 microtask 阻塞 任务 promise UI handleclick1

你能找出下面两个代码片段的区别吗:function handleclick1() { settimeout(handleclick1, 0);}function handleclick2() { promise.resolve().then(handleclick2);}登录后复制如果您无法确定选择其中一个的含义,那么这篇博文将教您一些新知识。 背景settimeout 用于安排在一定时间后回调。 promise.resolve().then 会有效地做同样的事情,但内部两者是不同的。后者返回一个已经解决的承诺。对该 promise 调用 then(callback) 将安排执行回调。所以上述两个函数都以最小的延迟递归地调用自己。不同之处在于,来自 settimeout 的回调被放置在宏任务队列中,而来自 promise.then() 的回调被放置在微任务队列中。事件循环如何处理这两个队列中的项目是上面两个代码片段的区别所在。 微任务与宏任务的事件循环处理事件循环所做的就是当有任务要执行时,它会执行这些任务,然后休眠并等待其他任务。 宏任务(或简称任务)包括负责工作的函数,例如:解析对 dom 做出反应,除此之外...执行从任务队列中选取的任务后,事件循环会执行微任务检查点。其算法类似于:While microtask queue is not empty, pick the oldest task from microtask queue and execute it.登录后复制这意味着,如果一个微任务将另一个微任务排入队列,则该任务将在下一个宏任务之前执行。而且由于 ui 渲染是一个宏任务,它永远不会被事件循环执行。这是上述内容的演示:js bin demo。无限动画正在运行。如果我们触发handleclick1,那么我们会向主线程添加一些处理,但动画仍然可以正确渲染。但是如果我们触发handleclick2,动画就会停止。我添加了变量totalcount,这样我们就可以在页面崩溃之前中断。但值得注意的是,一旦 microtask 循环启动,ui 将在一段时间内无响应。因为像渲染、响应 dom 等任务只有在 microtask 队列为空后才会执行。这使得上面代码片段中的handleclick1成为更安全的选择。希望这篇博客有助于解释微任务和宏任务之间的一个根本区别。 以上就是UI 阻塞行为:微任务与宏任务的详细内容,更多请关注我的其它相关文章!

标签:执行,队列,microtask,阻塞,任务,promise,UI,handleclick1
From: https://www.cnblogs.com/aow054/p/18424138

相关文章

  • 1.JDK自带的线程池有哪些?2.线程池中核心线程数与最大线程数与缓冲任务队列的关系?3.为
    1.JDK自带的线程池有哪些?2.线程池中核心线程数与最大线程数与缓冲任务队列的关系?在Java中的线程池(如ThreadPoolExecutor)中,核心线程数(corePoolSize)、最大线程数(maximumPoolSize)以及缓冲队列(workQueue)之间存在着密切的关系,它们共同决定了线程池如何管理和调度任务。以下是......
  • JDBC中Druid连接池的配置与使用
    Druid连接池:        支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、SQLServer等。        简单SQL语句用时10微秒以内,复杂SQL用时30微秒。        网站:https://github.com/alibaba/druid/releases应用: 1.复制上面的链接下载druid.文件,......
  • 一组.NET MAUI绘制的开源控件 - AlohaKit
    前言今天大姚给大家分享一组.NETMAUI绘制的开源、免费(MITLicense)UI控件库:AlohaKit。MAUI介绍.NETMAUI是一个开源、免费(MITLicense)的跨平台框架(支持Android、iOS、macOS和Windows多平台运行),是Xamarin.Forms的进化版,从移动场景扩展到了桌面场景,并从头重新生成了UI控件,以提......
  • 一组.NET MAUI绘制的开源控件 - AlohaKit
    前言今天大姚给大家分享一组.NETMAUI绘制的开源、免费(MITLicense)UI控件库:AlohaKit。MAUI介绍.NETMAUI是一个开源、免费(MITLicense)的跨平台框架(支持Android、iOS、macOS和Windows多平台运行),是Xamarin.Forms的进化版,从移动场景扩展到了桌面场景,并从头重新生成了UI控件,......
  • 排查帝国CMS定时刷新任务失效问题,快速解决!
    当帝国CMS的定时刷新任务失效时,可以通过以下几个方面来进行排查和解决:1.检查计划任务设置访问计划任务页面:登录帝国CMS后台管理系统,进入“系统”->“计划任务”页面。确认任务设置:确保定时刷新任务已经正确设置,包括触发时间、执行频率等参数。2.校验服务器时间检查服务......
  • DataX--Web:图形化界面简化大数据任务管理
            在处理大数据任务时,频繁地修改配置文件或编写脚本可能会变得繁琐且容易出错。DataXWeb提供了一个图形化界面,旨在简化这些操作,让用户通过直观的界面管理数据同步任务。DataXWeb简介        DataXWeb是一个开源项目,它允许用户通过Web界面来配置和管......
  • 直播短视频源码,延迟任务的解决方法
    直播短视频源码,延迟任务的解决方法在直播短视频源码中,我们有时候会遇到这样的场景,比如下单之后超过30分钟未支付自动取消订单,还有就比如过期/生效通知等等,这些场景一般有两种方法解决:第一种可以通过定时任务扫描符合条件的去执行;第二种就是提前通过消息队列发送延迟消息到期自......
  • HBuilderX如何高效开发UniApp的技巧
    我们在用HBuilderX开发UniApp的时候,需要去掌握一些输入的技巧,才能事半功倍。为提升开发效率,HBuilderX将 uni-app 常用代码封装成了以 u 开头的代码块,如在 template 标签内输入 ulist 回车,会自动生成如下代码:注意:需确保uni-list组件已保存在项目的components目录下。......
  • Unity UI制作新的记录
    也是玩上unity了家人们。记录一下与ui界面斗智斗勇的半个月。TextMeshProtextMeshProUGUI.preferredHeight获取文本长度,便于修改滚动条长度或文本物体长度。TextMeshPro中的使用的文本asset可以在导入字体font文件之后右键->create->TextMeshPro->fontasset......
  • jsDoc npm 模块任务
    目前我正在工作/维护遗留的js/react应用程序,没有办法重新工作到typesript,这就是为什么我打开jsdoc作为js现有的开发时类型系统。太长了;typescriptnpm模块由jsdoc制作,useduck在70loc下带回了redux的黄金时代。该模块在开发时的主要用例,帮助您的复杂状态保持......