如何在 V8 中内省数组中的元素种类
How to introspect elements kind in an array in V8
阅读本文后:https://v8.dev/blog/elements-kinds。我想知道在我的代码中创建的一些数组是打包的还是有洞的。有什么方法可以在浏览器环境(特别是 Chrome)中在运行时进行检查吗?
我正在寻找类似 %DebugPrint()
的东西,它适用于 Chrome。
也许我可以寻找其他一些线索。比如在堆快照中捕获的一些信息等
(此处为 V8 开发人员。)
据我所知,Chrome (DevTools) 不会公开数组的“元素类型”。
这可能没关系,因为“压缩”元素和“多孔”元素之间的性能差异非常小。本质上,它只出现在微基准测试中。压缩数组的典型好处是可以避免两条机器指令,否则就必须发生。如果您正在查看一个 one-line 热循环体,它可以编译成十几个机器指令,那么节省其中两个是可以衡量的。如果您正在查看一个 real-world 应用程序,其中数百 KB 的代码对整体性能有贡献,那么在这里保存两条机器指令并没有关系。
我知道你可能很好奇;但就切实的优化而言,还有更有效的方式来度过你的时间。谈论元素种类几乎是一个“出于好奇,这里有一些 JS 引擎从 JavaScript 中榨取每一点性能的长度”的故事; 不是大多数开发人员应该注意的重要性能建议。
阅读本文后:https://v8.dev/blog/elements-kinds。我想知道在我的代码中创建的一些数组是打包的还是有洞的。有什么方法可以在浏览器环境(特别是 Chrome)中在运行时进行检查吗?
我正在寻找类似 %DebugPrint()
的东西,它适用于 Chrome。
也许我可以寻找其他一些线索。比如在堆快照中捕获的一些信息等
(此处为 V8 开发人员。)
据我所知,Chrome (DevTools) 不会公开数组的“元素类型”。
这可能没关系,因为“压缩”元素和“多孔”元素之间的性能差异非常小。本质上,它只出现在微基准测试中。压缩数组的典型好处是可以避免两条机器指令,否则就必须发生。如果您正在查看一个 one-line 热循环体,它可以编译成十几个机器指令,那么节省其中两个是可以衡量的。如果您正在查看一个 real-world 应用程序,其中数百 KB 的代码对整体性能有贡献,那么在这里保存两条机器指令并没有关系。
我知道你可能很好奇;但就切实的优化而言,还有更有效的方式来度过你的时间。谈论元素种类几乎是一个“出于好奇,这里有一些 JS 引擎从 JavaScript 中榨取每一点性能的长度”的故事; 不是大多数开发人员应该注意的重要性能建议。