范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

聊聊浏览器宏任务的优先级

  这篇文章源于我之前写过的一篇关于MessageChannel的文章,里面举到一个例子:setTimeout(() => {     console.log("setTimeout") }, 0);  const { port1, port2 } = new MessageChannel(); port2.onmessage = function () {     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个步骤。更多的说法是:执行同步代码(也属于宏任务),只执行一次,过程中遇到异步代码交给不同的web api异步处理,处理完之后会将回调对应的任务推入宏任务队列;执行并清空所有微任务;执行下一个宏任务。
  网上用得比较多的一张图是:
  图片来源网络
  但我觉得下面这张更精确,因为它表明了宏任务队列可能有多个。
  图片来源网络
  HTML标准里是这样描述的:
  An event loop has one or more task queues. A task queue is a set of tasks.
  Task queues are sets, not queues, because the event loop processing model grabs the first runnable task from the chosen queue, instead of dequeuing the first task.
  这里的task queue指的就是宏任务队列。事件循环有一个或多个宏任务队列,每个宏任务队列是任务的一个集合(注意,实际是集合而不是队列)。因为宏任务队列中保存的任务并不一定都是可执行的,事件循环处理模型每次取的都是可执行的第一个任务,行为上并不是队列的FIFO。
  一般来说,任务都是可执行的,所以我们可以忽略单个宏任务队列中任务的优先级,重点关注不同的宏任务队列之间的优先级。影响宏任务优先级的因素一、浏览器的实现
  我们知道,宏任务包括执行整体的js代码、DOM事件回调、XHR回调、计时器、IO操作和UI render。
  标准描述了4种通用的宏任务来源:DOM manipulation 任务源:DOM操作相关的,非阻塞性的,比如往document中插入元素。对应Prioritized Task Scheduling API的user-visible 等级;user interaction 任务源:用户交互相关的,比如键盘或鼠标输入,最常见的就是click事件。对应Prioritized Task Scheduling API的user-blocking 等级;networking 任务源:网络活动相关;navigation and traversal 任务源:导航和history寻访相关。
  另外,在浏览器的实现中,应该还有timer 任务源等。
  不同任务源的任务会放到不同的队列。
  HTML标准虽然定义了任务源,但没有定义任务源的优先级,优先级由各个浏览器厂商自己决定。因此,并不是规范失效,而是规范给了浏览器厂商自由度,不同浏览器的宏任务队列的顺序可能不一样。但比较一致的是,在大多浏览器中,user interaction 相关的宏任务拥有最高的优先级,timer 相关的宏任务优先级则较低。二、防饥渴机制
  对于任务的调度,浏览器有防饥渴机制,避免高优先级的任务队列一直执行,导致低优先级的任务队列永远得不到执行的机会。
  这也有可能给宏任务的执行顺序带来不确定性。测试
  结合Kaiido提供的代码和Prioritized Task Scheduling,在当前chrome上可以得出以下优先级顺序:
  user-blocking = user interaction > user-visible = DOM manipulation = timer = MessageChannel = naviation and traversal > networking > background
  MessageChannel和timer有相同的优先级,代码书写顺序决定它们的打印顺序。总结宏任务队列可能有多个,而且严格来说它们是集合,不同的队列优先级不同;浏览器实现的自由度以及防饥渴机制也有可能带来宏任务优先级的不稳定;当前chrome版本测得,MessageChannel和timer具有相同的优先级。参考资料https://stackoverflow.com/a/66978351/17840557https://stackoverflow.com/a/70913524https://html.spec.whatwg.org/multipage/webappapis.htmlhttps://github.com/WICG/scheduling-apis/blob/main/explainers/prioritized-post-task.mdhttp://lynnelv.github.io/js-event-loop-browserhttps://yeefun.github.io/event-loop-in-depth/https://wicg.github.io/scheduling-apis/

2013年,豪车女司机拖拽收费员致死,连累父亲被判刑,怎么回事?2013年1月27日,距离除夕还有半个月,北京市已经处处洋溢着过年的气息。然而,在西单大悦城停车场内,发生了一起触目惊心的事故。一名女子下班回家,途中亲眼目睹了丈夫丁强被豪车拖行三月经总是提前来,究竟是哪里出了问题?女性朋友了解一下月经是女性朋友特有的一种生理标志,生活当中很多女性朋友可能会把月经看作是身体健康的晴雨表,根据月经的状态来判断身体健康方面的问题。女性的月经是从子宫当中产生的,观察月经的状况,不但西朱村曹魏墓女儿奴魏明帝的至暗时刻西朱村曹魏墓。成长摄西朱村曹魏墓出土的童子骑羊琥珀。洛阳市文物考古研究院供图中国古代因为医疗条件的落后和疫病频发,婴幼儿的夭折率很高,即使贵为帝王之家也难以幸免。魏太和六年(232安倍晋三遇刺身亡后,数次ampampquot绿ampampquot他的妻子安倍昭惠,野心让人胆寒安倍晋三遇刺身亡后,数次绿他的妻子安倍昭惠,野心让人胆寒安倍晋三被击中倒地的那一刻,不仅是他本人,恐怕现场的所有人都不会想到。看起来是鞭炮齐鸣的场景,结果却是暗杀!安倍晋三,或者说乔治唐斯带女友在意大利夜店狂欢!扭臀骚舞乔治与妻子热吻吸睛北京时间7月12日,保罗乔治和唐斯带着各自的另一半前往意大利的夜店嗨皮,从视频中可以看到唐斯和保罗乔治玩得非常开心,同时在视频的结尾,乔治和妻子还亲吻着对方,又是狂撒狗粮。在视频一安倍葬礼前后安排,经NNN统计,结果有点让人震惊又觉得必然12日下午1点,在东京港区的增上寺,举行了安倍日本前首相的葬礼。安倍日本前首相的盟友麻生太郎读了悼词,之后,担任丧主的妻子昭惠夫人向参加者进行了问候。下午2点半左右,搭载安倍日本前南宁武警支队开展心理服务进基层活动2022年7月10日,南宁,武警广西总队南宁支队组织开展心理服务进基层活动,通过心理游戏情绪疏导心理援助等暖心服务,丰富官兵生活,疏导官兵的不良情绪,也培养了其健康心理。2022年母女被雨衣男拖拽进屋涉事男子被拘留,两人刚离婚?7月11日,一段视频在网上热传。视频中,一对母女上楼回家。就在母亲开门后,一个穿着雨衣的男子突然从楼道里冲出来,把母亲拖进屋里,然后又把女孩拖进屋里。门砰的一声关上了,摄像头是空的知名作家受网络暴力自杀!手拿大把药往嘴里塞,送医急救拒绝治疗饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!7月12日,知名作家洛拾意因遭受网络暴力而服药轻生,她在社交平台上晒出了自己服药自杀的视频,引发网友热议。洛拾意是某网络业主,集体抱团停贷了这两天市场的大热点,莫过于业主开始联合起来要求停贷了!这件事情,可大可小,因为颇有野火燎原之势。先是江西景德镇某恒大楼盘,项目从去年5月开始停工,中间短期复工,今年6月又再次停工,买到烂尾楼,集体断供就没事了,别傻了买到烂尾楼,集体断供就没事了,别傻了。在楼市下行,房企资金紧张的大背景下,楼盘停工现象多了起来。面对花了血汗钱买的房子陷入烂尾,不能交房,最苦最无辜最无助的就是购房的老百姓了。有的
华声漫评打击电子烟中的伪装者还需多方发力在网上买电子烟容易吗?近日,记者在调查中发现,几乎所有的主流电商平台对电子烟都做了禁售处理。不过,在一些社交平台上,只要搜索奶茶杯星空杯等关键词,就会出现各种售卖渠道,有的社交平台家乐福中国引入安庆市迎江区国资战投积极推动转型本报记者钟楚涵蒋政上海报道2月20日,家乐福中国方面透露,家乐福中国与安徽省安庆市迎江区政府达成战略合作签约,推动双方在供应链资金商业运营等多方面的深度合作。中国经营报记者了解到,J联赛亚洲独大!中超危机重重,管理方式差距巨大中超联赛这些年来一直在学习日本J联赛,两国联赛几乎同时在上世纪九十年代起步,但经过30年的发展,J联赛已经成为亚洲最顶级的联赛,而中超联赛则成为即马来西亚联赛后又一个假赌黑盛行的联铁人经分球论44铁人群视频集铁人经,与易筋经欢喜经语录经,并称地球武林宇宙世界四大真经,深奥玄妙,意境幽远,艰深晦涩,非DNA纯净者思想纯净者作风纯净者身子纯净者(简称四个纯净)不可读懂悟深吃透修日本大手笔援乌55亿,普京迅速作出回应,末日潜艇派往远东拜登访问基辅当天,日本同时宣布对乌新援助,金额高达55亿美元,普京迅速作出回应,可携带波塞冬的末日潜艇正在派往远东!2月20日上午,拜登突然现身基辅火车站,引起世界各国高度关注,而篮球女神李月汝拿下世界杯亚军,转身与相恋5年的男友分手提起李月汝这个,想必经常看球的人都不会陌生。作为2022年,帮助队伍一举拿下世界杯亚军,当选最佳阵容二阵的明星选手,李月汝的一举一动都牵扯着球迷们心。尤其是她的感情,一直是球迷们关应清获中国雪车队首枚世界杯奖牌来源湖南体育局赛事信息在北京时间月日晚进行的国际雪车联合会雪车世界杯拉脱维亚锡古尔达站女子单人雪车项目中,中国队应清取得突破,获得铜牌。她在创造个人最佳成绩的同时,也为中国雪车队拿直接点名!名记再爆猛料,前国足队长受牵连,中国足球还有好人吗本以为陈戌源被查后,李铁事件将告一段落,没想到中国足球的扫黑仍在继续。最近,不断有记者暗示,接下来还会有更重量级的人物落网。当然,这些名记大多也只是猜测。不过,冉雄飞却在与网友对线大改变!63岁老臣掌管中国足协,组建团队大调整相比较李铁被调查超过三个月,陈戌源被带走还不到一周就陆续曝出了越来越多的内幕,也牵扯出了很多的官员,甚至著名足球媒体人袁甲还声称,如今至少有三人因局势逃往到了美国,那么这一次的反腐家来四人,注定兴旺这些人的到来,会渡你一家老小家庭当中的每一位长辈,都有这么一个想法,家庭兴盛,子孙兴旺。自己过得不好,没关系,只要家庭可以持续发展,那就可以了。当下活得不太幸福,没关系,只要后代的子孙能够兴旺,那就足够了。不演哪出?法德乌首脑联合会谈,表态俄罗斯绝对不能赢自从俄军占领军事重镇索莱达尔以来,俄军在顿涅茨克地区的攻势可谓是势如破竹,乌军全线呈现溃败之势,就连泽连斯基都不得不承认,乌军在顿涅茨克的防线近乎被俄军瓦解。然而泽连斯基显然不可能