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

2023-01-09 16:55:16 +08:00
 az22c

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

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

[第二个问题] :

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

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


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


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

1034 次点击
所在节点    前端开发
8 条回复
ZoeeoZ
2023-01-09 17:02:52 +08:00
🤣我看过很多关于宏任务,微任务的文章,除去那些低级的,复制的,面试笔记类的,真的一个人一个说法
az22c
2023-01-09 17:09:21 +08:00
@ZoeeoZ #1 同感,我这里基本不涉及到“宏任务微任务谁先执行”的讨论。这里本质上还是“宏任务”这词的定义的问题,然后解决清楚这个问题,看 chrome 控制台火焰就比较清晰。然后应对网上一些说“xxx 也是宏任务”这种扩充,需要认真考究,不然越来越模糊,产生“鸡同鸭讲” 的局面
az22c
2023-01-09 17:17:44 +08:00
还有人把处理“关键渲染路径”也就是计算渲染页面相关的步骤,也当做是“宏任务”。这种说法在网上很常见
ZoeeoZ
2023-01-09 17:18:15 +08:00
@az22c 我之前看到一个比较靠谱的讨论:
js 中到底有没有宏任务这个概念? - 紫云飞的回答 - 知乎
https://www.zhihu.com/question/560193382/answer/2719657486
az22c
2023-01-09 17:39:07 +08:00
@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
ZoeeoZ
2023-01-09 17:46:49 +08:00
@az22c 所以才说混乱嘛..按这篇文章的观点的话,是不存在"宏任务"这个概念的. 我猜这个名词的出现是因为"micro task"的出现,为了作区分才有了与之相对的"宏任务"
fernandoxu
2023-02-12 00:31:37 +08:00
@az22c #5 可能是这样吧,就根本没宏任务(macro task)这个词。。但是各种教程包括英文的老多都这么说
az22c
2023-02-24 12:03:46 +08:00
@fernandoxu 这个研究工作太难做了。找不到源头

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907655

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX