聊聊浏览器宏任务的优先级
这篇文章源于我之前写过的一篇关于MessageChannel的文章,里面举到一个例子:setTimeout((){console。log(setTimeout)},0);const{port1,port2}newMessageChannel();port2。onmessagefunction(){console。log(MessageChannel);};port1。postMessage(ping);Promise。resolve()。then((){console。log(Promise);});
当时我说上面这段代码中MessageChannel先于setTimeout打印。因为我查过资料,了解到宏任务是有优先级的,DOM事件的优先级就比timer的优先级高,而MessageChannel的message事件又属于DOM事件,所以我得出先打印MessageChannel再打印setTimeout的结论。而且印象中我也在chrome中验证过这个结论。
但文章的评论区很多同学反映他们执行的结果是先打印setTimeout再打印MessageChannel,我试过之后发现的确如此。
stackoverflow上有关于宏任务优先级的问题,大家可以看下Kaiido的回答(1和2),他也认为MessageChannel比setTimeout有更高的优先级。但实际上以当前chrome的运行结果来看,两者有相同的优先级,输出顺序取决于它们在代码里的先后顺序。
为什么出现这样的问题,这篇文章就来研究一下。
本文大部分代码都是基于当前最新的chrome测试的,版本号为110。0。5481。100。排查
在90。0。4430。212版本的chrome上执行上面的代码,MessageChannel的确在setTimeout之前打印。而从MessageChannel那篇文章发表的时间来看,当时使用的chrome版本应该介于90。0。4430。212和110。0。5481。100之间,表现跟90。0。4430。212版本一致。
所以,可以确定的是,chrome在90。0。4430。212和110。0。5481。100之间的某个版本修改了MessageChannel和setTimeout的优先级顺序。
至于具体是哪个版本做出更改,以及为什么更改,由于时间精力有限,我并没有找出确切答案。
为什么宏任务的优先级可以随意变更?规范失效了吗?下面就来回答这个问题。事件循环
网上关于事件循环的文章很多,这里简单回顾一下事件循环的流程:
图片来源网络
一次事件循环的过程:取出一个宏任务执行;执行所有微任务直至清空微任务队列;如果需要渲染,执行渲染更新。
事件循环就是不断重复上面3个步骤。更多的说法是:执行同步代码(也属于宏任务),只执行一次,过程中遇到异步代码交给不同的webapi异步处理,处理完之后会将回调对应的任务推入宏任务队列;执行并清空所有微任务;执行下一个宏任务。
网上用得比较多的一张图是:
图片来源网络
但我觉得下面这张更精确,因为它表明了宏任务队列可能有多个。
图片来源网络
HTML标准里是这样描述的:
Aneventloophasoneormoretaskqueues。Ataskqueueisasetoftasks。
Taskqueuesaresets,notqueues,becausetheeventloopprocessingmodelgrabsthefirstrunnabletaskfromthechosenqueue,insteadofdequeuingthefirsttask。
这里的taskqueue指的就是宏任务队列。事件循环有一个或多个宏任务队列,每个宏任务队列是任务的一个集合(注意,实际是集合而不是队列)。因为宏任务队列中保存的任务并不一定都是可执行的,事件循环处理模型每次取的都是可执行的第一个任务,行为上并不是队列的FIFO。
一般来说,任务都是可执行的,所以我们可以忽略单个宏任务队列中任务的优先级,重点关注不同的宏任务队列之间的优先级。影响宏任务优先级的因素一、浏览器的实现
我们知道,宏任务包括执行整体的js代码、DOM事件回调、XHR回调、计时器、IO操作和UIrender。
标准描述了4种通用的宏任务来源:DOMmanipulation任务源:DOM操作相关的,非阻塞性的,比如往document中插入元素。对应PrioritizedTaskSchedulingAPI的uservisible等级;userinteraction任务源:用户交互相关的,比如键盘或鼠标输入,最常见的就是click事件。对应PrioritizedTaskSchedulingAPI的userblocking等级;networking任务源:网络活动相关;navigationandtraversal任务源:导航和history寻访相关。
另外,在浏览器的实现中,应该还有timer任务源等。
不同任务源的任务会放到不同的队列。
HTML标准虽然定义了任务源,但没有定义任务源的优先级,优先级由各个浏览器厂商自己决定。因此,并不是规范失效,而是规范给了浏览器厂商自由度,不同浏览器的宏任务队列的顺序可能不一样。但比较一致的是,在大多浏览器中,userinteraction相关的宏任务拥有最高的优先级,timer相关的宏任务优先级则较低。二、防饥渴机制
对于任务的调度,浏览器有防饥渴机制,避免高优先级的任务队列一直执行,导致低优先级的任务队列永远得不到执行的机会。
这也有可能给宏任务的执行顺序带来不确定性。测试
结合Kaiido提供的代码和PrioritizedTaskScheduling,在当前chrome上可以得出以下优先级顺序:
userblockinguserinteractionuservisibleDOMmanipulationtimerMessageChannelnaviationandtraversalnetworkingbackground
MessageChannel和timer有相同的优先级,代码书写顺序决定它们的打印顺序。总结宏任务队列可能有多个,而且严格来说它们是集合,不同的队列优先级不同;浏览器实现的自由度以及防饥渴机制也有可能带来宏任务优先级的不稳定;当前chrome版本测得,MessageChannel和timer具有相同的优先级。参考资料https:stackoverflow。coma6697835117840557https:stackoverflow。coma70913524https:html。spec。whatwg。orgmultipagewebappapis。htmlhttps:github。comWICGschedulingapisblobmainexplainersprioritizedposttask。mdhttp:lynnelv。github。iojseventloopbrowserhttps:yeefun。github。ioeventloopindepthhttps:wicg。github。ioschedulingapis
凤凰娱乐城!谁还记得这地方?凤凰娱乐城!谁还记得这地方?荆门掇刀凤凰水库西南区域,有一大片树林,一到夏天,这里郁郁葱葱,湖风习习,倒是个避暑的好地方!时下,这里凉风飒飒,满目秋色,十分安静。树林里掩映着十几处
走进最美画卷,在6000米徒步栈道赏秋叶红叶地点房山坡峰岭秋游亮点6000米环山栈道红叶节房山幽岚山坡峰岭的红叶已进入最佳观赏期。图ICphoto房山幽岚山坡峰岭的红叶已进入最佳观赏期,正在举办的2022年第十一届坡峰岭
秋色正好,邂逅秋日甜蜜桔子味的秋天因为存在,所以美好,在深秋,约三五好友,出门踏秋,登山赏桔,坐看秋色,凝望秋水,沉醉于如诗如画的秋景中。秋天是什么颜色?南丰是一个桔色的天地,这里又到了果实飘香蜜桔收获
湖北大洪山原石部落国际旅游度假区亿年原石谷独现龙图腾随州市位于湖北省北部,闻名于世的编钟就出土于此,随州也是华夏始祖炎帝神农的诞生地,随州居荆豫要冲,扼汉襄咽喉,为鄂北重镇,是湖北省对外开放的北大门。随州古称汉东
益阳赫山闲置厂房迎新生引燃乡村旅游市场农庄的前身是一处闲置厂房。游客在农庄的蔬菜基地体验采摘乐趣。农庄的食材全部是自己种养的。整洁宽敞的就餐大厅。红网时刻记者王新凤通讯员殷玥刘吉益阳报道深秋的早晨,一抹阳光穿过云层照进
秋韵北宫国家森林公园数千亩彩叶林披上盛装央广网北京10月20日消息(记者朱冠安)一年好景君须记,最是橙黄橘绿时。北京的秋像一把神奇的笔刷掠过双眼,山河顿时变得绚丽多彩。距北京市中心约20公里的北宫国家森林公园,数千亩彩叶
智慧景区多业态双中台功能新增,新功能上线啦景区通多业态双中台功能新增近期,巨有科技多业态双中台在景区展示页面景区后台管理方面进行了进一步优化,上线了一些好用又方便的新功能,希望能给景区管理者和涉旅企业带来便捷高效的服务体验
众泰我又回归啦,新车已下线!未来采用价格屠夫拼市场现在的新能源汽车发展得越来越好,发展速度也是越来越快!但大家知道吗?曾经在燃油车时代也有过这样繁荣的时期,大部分自主品牌燃油车都不愁卖。于是市面上出现了很多汽车厂家,有的厂家是从事
宜安科技李扬德一手炮制的液态金属弥天大谎最近一个月来,科技股暴涨,尤其是与特斯拉华为卫星沾边的,涨的尤其突出。面对暴涨而来收益,减仓是自然的。问题是,难得的行情,减仓买什么呢?于是,把研究的重点和精力放在了滞涨,又有些技
沙发管家长虹J7投影仪发布4K分辨率,首发价2399元近日,长虹推出了其首款LCD投影仪长虹J7投影仪。这款投影仪配有4K分辨率,1600ANSI流明,支持全局自动对焦自动梯形校正功能。目前首发价2399元。据官方介绍,长虹J7投影仪
徕芬科技2022年度秋季新品发布会将技术普惠进行到底9月26日,徕芬科技举办主题为将技术普惠进行到底的2022年度秋季新品发布会,会上正式发布了全新SE(SpecialEdition,特别版)版本的高速吹风机。徕芬科技创始人兼总工程
有哪些给女孩子的建议?1存钱。努力存钱,可以让人有安全感。钱是源动力!2不要碰有家室的男人,即便他爱你,即便他为你离婚。这是道德底线。3变得更强大。职业上的努力,让你少走很多弯路。报个班,学点技能,让你
如何做好审计?前景如何?我本人是2004年通过注册会计师考试,然后进入会计师事务所做审计工作至今已有16年,对如何做好审计工作,颇有感触。刚开始进入会计师事务所要从审计助理做起,但是一晃3年多的时间过去了
为什么同样的处理器,有的华为手机和荣耀手机差价那么大?这是因为荣耀会在其它很多方面缩水,只是大家不容易察觉罢了,再就是华为的品牌溢价,就像苹果手机,是一个阶级的象征。华为mate20和荣耀V20,具体区别1。显示屏虽然参数上都写lcd
哪个二维码生成器可以做活码?哪个二维码生成器可以生成活码?推荐1。草料二维码(图1)官方介绍草料二维码是国内专业的二维码服务提供商,提供二维码生成,美化,印制,管理,统计等服务,帮助企业通过二维码展示信息并采
保研是种什么体验?我是985高校保研上的本校,怎么说呢,肯定会感到爽,但也有一些不甘心吧。我当时已经决定考一所更好的学校,大三暑假没有回家上考研班,天天上自习就为了考上心仪的学校心仪的专业。大四开学
如何刺激女性激素分泌?女性激素分泌尤其是性激素分泌的器官是卵巢。正常情况下,女性卵巢分泌性激素的剂量,受大脑控制而体内性激素水平又反过来影响大脑调节功能,如此周而复始,形成循环。如何刺激女性激素分泌?女
什么叫虚假GDP?纵观网络上发表的一些,文章,不管是自媒体还是网红,都提及只要自己所在城市直辖,将发发展得如何如何,大有世界第一城的决心,殊不知直辖后中央不给你政策凭你自己发展不起来,现在省会城市和
中国对外投资最新形势如何?2005年以来,中国企业对欧盟直接投资的流量和存量不断增加(如表2所示),特别是2009年希腊主权债务危机突然爆发,而且向欧盟其他国家扩散以后,中国企业对欧洲的投资出现了跳跃式的增
有些农村80后夫妻只待在农村种地带娃,也不出去打工,这么做合理吗?因为疫情,加之工作难找,你待在家中种田带孩子,我看很合理,更安全更安定。再说,就不是疫情和工作难找,也不一定非得外出打工才合理,因为种田带孩子也是正事,种田也要吃苦,也要技术,也能
大家有没有在看病的时候遇到令人感动的医生或护士?前一段时间,家里的人住院,遇到一个小护士,20几岁,非常温柔。家人脑梗,牙齿被塞了很多食物残渣,口腔有点脏,自己喝水,漱口都困难,口味很重,我白天要上班,每天只能晚上去。有一次,这
游戏是很多玩家中二的开始,那么英雄联盟中又有哪些看起来炫酷,念出来羞耻的技能呢?当我看到这个问题时,我内心的中二之魂突然涌动起来了,可能我们这代人大部分小时候都看着热血漫画之类长大的。但是现在的年轻人已经很少再去接触那些东西了,从小开始基本就浸在游戏的世界之中