gpt4 book ai didi

node.js - 在现代 Node.js 中更新 Error 对象的性能损失

转载 作者:搜寻专家 更新时间:2023-10-31 22:39:45 24 4
gpt4 key购买 nike

在某些用例中,为了检索堆栈跟踪的目的,需要新建一个 Error 对象,例如用于日志记录引擎或内联调试。

在首次创建 Error 对象时,现代 node.js 是否会严重影响性能,或者聪明的 V8 开发人员想出在开发人员调用 .stack 属性时按需展开堆栈。

根据我对这些工具的探索,我认为直到访问 .stack 才会执行堆栈跟踪展开,这似乎是一种常识性设计方法。

任何人都可以阐明这一点或建议在调试 native V8 代码的情况下进行验证的方法吗?

最佳答案

我构建了一个基准测试并将其发布到 my github repo .我的测试结果证实,node.js 背后的 V8 引擎在创建任何错误对象(包括错误的子类)时捕获堆栈信息。

我的测试相当复杂,但我想确保绕过 V8 中的任何优化以展开调用堆栈。我通过在每次测试迭代中生成一个随机调用堆栈来实现这一点。我还尝试调用 Error.stack 而不是调用 Error.stack,其影响可以忽略不计。

有趣的是,构建错误的性能受到影响,展开长度超过 10 步的堆栈并将堆栈跟踪作为字符串拉出仅花费了大约 87 微秒。构建通用对象的成本约为 21 微秒。

我还在 V8 Github 存储库上找到了一条注释 Stack Trace API页:

Note that the custom prepareStackTrace function is immediately called at the point when the error object is created (e.g. with new Error()).

关于node.js - 在现代 Node.js 中更新 Error 对象的性能损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com