看到这个 html 规范 里面对 event loop 的 Processing model 的规定,处理每个 task(姑且认为它是指“宏任务”) 的时候会执行步骤“Perform a microtask checkpoint”,对于这步下面有进一步的详细说明,效果相当于是执行完目前批次一堆的 microtask 。由此可以认为如题 [标题的结论] 是正确的
这也难怪网上很多人,有类似的说法:
[第二个问题] :
我认为 这个老哥他文章 把 chrome 控制台火焰图 “灰色 Task”当做是某个宏任务,他得出了结论:
“requestAnimationFrame 回调、requestIdleCallback 回调、GC 、html 中的 script 等都是宏任务”
最后,说说个人对以上 2 个命题的 1 个看法:
你对这 2 个命题的看法是什么呢?欢迎指正
1
ZoeeoZ 2023-01-09 17:02:52 +08:00 1
🤣我看过很多关于宏任务,微任务的文章,除去那些低级的,复制的,面试笔记类的,真的一个人一个说法
|
2
az22c OP @ZoeeoZ #1 同感,我这里基本不涉及到“宏任务微任务谁先执行”的讨论。这里本质上还是“宏任务”这词的定义的问题,然后解决清楚这个问题,看 chrome 控制台火焰就比较清晰。然后应对网上一些说“xxx 也是宏任务”这种扩充,需要认真考究,不然越来越模糊,产生“鸡同鸭讲” 的局面
|
3
az22c OP 还有人把处理“关键渲染路径”也就是计算渲染页面相关的步骤,也当做是“宏任务”。这种说法在网上很常见
|
4
ZoeeoZ 2023-01-09 17:18:15 +08:00
@az22c 我之前看到一个比较靠谱的讨论:
js 中到底有没有宏任务这个概念? - 紫云飞的回答 - 知乎 https://www.zhihu.com/question/560193382/answer/2719657486 |
5
az22c OP @ZoeeoZ #4 我觉得这个知乎回帖里面有两句话:
> "宏任务就是任务" > > "新的 postTask 是统一了之前那些用来 post task 的 API ,比如 setTimeout 、postMessage 、requestAnimationFrame 、requestIdleCallback 。" 这么说,可以推导 requestAnimationFrame 、requestIdleCallback 也是宏任务。但是我发的那个 html 规范 里面,requestAnimationFrame 、requestIdleCallback 是属于"Update the rendering"的过程,只能说是宏任务的其中一环。那不是结论前后矛盾嘛? https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model |
6
ZoeeoZ 2023-01-09 17:46:49 +08:00
@az22c 所以才说混乱嘛..按这篇文章的观点的话,是不存在"宏任务"这个概念的. 我猜这个名词的出现是因为"micro task"的出现,为了作区分才有了与之相对的"宏任务"
|
7
fernandoxu 2023-02-12 00:31:37 +08:00 1
@az22c #5 可能是这样吧,就根本没宏任务(macro task)这个词。。但是各种教程包括英文的老多都这么说
|
8
az22c OP @fernandoxu 这个研究工作太难做了。找不到源头
|