挖坟:浏览器“微任务执行时间”总是从属于“某段宏任务的执行时间”? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
az22c
V2EX    前端开发

挖坟:浏览器“微任务执行时间”总是从属于“某段宏任务的执行时间”?

  •  2
     
  •   az22c 2023-01-09 16:55:16 +08:00 1324 次点击
    这是一个创建于 1082 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到这个 html 规范 里面对 event loop 的 Processing moel 的规定,处理每个 task(姑且认为它是指“宏任务”) 的时候会执行步骤“Perform a microtask checkpoint”,对于这步下面有进一步的详细说明,效果相当于是执行完目前批次一堆的 microtask 。由此可以认为如题 [标题的结论] 是正确的

    这也难怪网上很多人,有类似的说法:

    [第二个问题] :

    我认为 这个老哥他文章 把 chrome 控制台火焰图 “灰色 Task”当做是某个宏任务,他得出了结论:

    “requestAnimationFrame 回调、requestIdleCallback 回调、GC 、html 中的 script 等都是宏任务”


    最后,说说个人对以上 2 个命题的 1 个看法:

    • 猜想:chrome 控制台“灰色 Task”代表的就是 html 规范 里面 Processing model 里面的 task 。同时 task 应该被视为“宏任务”。“宏任务”应该是很久之前某个老外发明的词语,特指用来总结 setTimeout 回调、setInterval 回调等等,用于总结了这么一堆“宏任务”。这些“宏任务”在火焰图里面体现为“‘灰色 Task’下级的 Function Call 片段的下级时间片段”
      • 这么来说,标题的结论也是错的
      • 这么来说, [第二个问题] 里面的老哥说错了

    你对这 2 个命题的看法是什么呢?欢迎指正

    8 条回复    2023-02-24 12:03:46 +08:00
    ZoeeoZ
        1
    ZoeeoZ  
       2023-01-09 17:02:52 +08:00   1
    我看过很多关于宏任务,微任务的文章,除去那些低级的,复制的,面试笔记类的,真的一个人一个说法
    az22c
        2
    az22c  
    OP
       2023-01-09 17:09:21 +08:00
    @ZoeeoZ #1 同感,我这里基本不涉及到“宏任务微任务谁先执行”的讨论。这里本质上还是“宏任务”这词的定义的问题,然后解决清楚这个问题,看 chrome 控制台火焰就比较清晰。然后应对网上一些说“xxx 也是宏任务”这种扩充,需要认真考究,不然越来越模糊,产生“鸡同鸭讲” 的局面
    az22c
        3
    az22c  
    OP
       2023-01-09 17:17:44 +08:00
    还有人把处理“关键渲染路径”也就是计算渲染页面相关的步骤,也当做是“宏任务”。这种说法在网上很常见
    ZoeeoZ
        4
    ZoeeoZ  
       2023-01-09 17:18:15 +08:00
    @az22c 我之前看到一个比较靠谱的讨论:
    js 中到底有没有宏任务这个概念? - 紫云飞的回答 - 知乎
    https://www.zhihu.com/question/560193382/answer/2719657486
    az22c
        5
    az22c  
    OP
       2023-01-09 17:39:07 +08:00
    @ZoeeoZ #4 我觉得这个知乎回帖里面有两句话:

    > "宏任务就是任务"
    >
    > "新的 postTask 是统一了之前那些用来 post task 的 API ,比如 setTimeout 、postMessage 、requestAnimationFrame 、requestIdleCallback 。"

    这么说,可以推导 requestAnimationFrame 、requestIdleCallback 也是宏任务。但是我发的那个 html 规范 里面,requestAnimationFrame 、requestIdleCallback 是属于"Update he rendering"的过程,只能说是宏任务的其中一环。那不是结论前后矛盾嘛?

    https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model
    ZoeeoZ
        6
    ZoeeoZ  
       2023-01-09 17:46:49 +08:00
    @az22c 所以才说混乱嘛..按这篇文章的观点的话,是不存在"宏任务"这个概念的. 我猜这个名词的出现是因为"micro task"的出现,为了作区分才有了与之相对的"宏任务"
    fernandoxu
        7
    fernandoxu  
       2023-02-12 00:31:37 +08:00   1
    @az22c #5 可能是这样吧,就根本没宏任务(macro task)这个词。。但是各种教程包括英文的老多都这么说
    az22c
        8
    az22c  
    OP
       2023-02-24 12:03:46 +08:00
    @fernandoxu 这个研究工作太难做了。找不到源头
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2524 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 15:15 PVG 23:15 LAX 07:15 JFK 10:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86