【发布时间】:2022-01-23 01:11:31
【问题描述】:
根据Zero-cost async stack traces V8 使用微任务中的 Promise 引用来重构“异步堆栈跟踪”。我假设调试器中也使用了类似的技术,它也显示了“异步堆栈”。但是,在调试“伪递归函数”时,例如这个使用requestAnimationFrame:
(function tick() { requestAnimationFrame(tick); })();
然后 Chrome 还显示了一些“异步堆栈”,如 this question 所示,尽管不存在 Promise。 V8 如何恢复这个堆栈?它是否收集有关如何安排微任务的信息?如果是这样,是什么阻止了它泄露内存?
【问题讨论】:
-
这不是 rAF 特有的,“递归”setTimeout 也会发生同样的情况
-
和here 是一些相关信息。现在没有时间给出正确的答案,但基本上,它们象征着每个异步事件的新堆栈当开发工具打开时。您可以通过在命令菜单中输入
Do not capture async stack traces来控制此行为(开发工具中的 ctrl + shift + P)。 -
@Kaiido 非常有趣的发现,谢谢!
标签: javascript google-chrome-devtools v8