gpt4 book ai didi

javascript - 优化参数有什么用?

转载 作者:数据小太阳 更新时间:2023-10-29 03:51:16 26 4
gpt4 key购买 nike

众所周知,在 JavaScript 中不正确地使用 arguments 可能会导致函数不可优化(参见 herehere by the end ):

function notOptimisable (a, b) {
// Optimising compiler says: Nope.
var args = [].slice.call(arguments)
}

但是,到目前为止,没有任何消息来源能够解释为什么这会阻止优化的发生

更令人难以置信的是,我所要做的就是

function optimisable (a, b) {
// Optimising compiler says: I can do this!
var args = new Array(arguments.length)
, i = 0

// Copy the arguments into an actual array, very carefully...
for(i; i < args.length; ++i)
args[i] = arguments[i]
}

瞧 - 我有一个 arguments 的副本,它是一个实际的数组,可以优化函数:

node --trace_opt --trace_deopt script.js # Exerpt below

[marking 0x24ba2c0bf0f1 <JS Function notoptimisable (SharedFunctionInfo 0x26b62a724859)> for recompilation, reason: small function, ICs with typeinfo: 3/3 (100%), generic ICs: 0/3 (0%)]
[disabled optimization for 0x26b62a724859 <SharedFunctionInfo notoptimisable>, reason: Bad value context for arguments value]
[failed to optimize notoptimisable: Bad value context for arguments value]
[marking 0x24ba2d0041b1 <JS Function optimisable (SharedFunctionInfo 0x26b62a7247b1)> for recompilation, reason: small function, ICs with typeinfo: 7/7 (100%), generic ICs: 0/7 (0%)]
[optimizing 0x24ba2d0041b1 <JS Function optimisable (SharedFunctionInfo 0x26b62a7247b1)> - took 0.039, 0.164, 0.051 ms]

因此,我问你:

为什么?

  • 哪些技术挑战阻碍了优化的发生?
  • 为什么 v8 引擎不能简单地返回一个标准的参数数组,就像第二个代码示例显示和优化函数一样?
  • 额外的一点,为什么 arguments 从语言设计的 Angular 来看只是一个“类数组”对象(即它有数字键,但它不是 Array 的后代)并且这样做以某种方式在优化过程中发挥作用?

最佳答案

没有无法克服的技术挑战。这只是在 Crankshaft 中实现参数对象期间做出的一个捷径决定:仅支持可以轻松避免参数对象实现的情况。

即使 Crankshaft 支持参数对象的具体化,生成的代码仍然比不分配参数对象的代码

这只是在 10 分钟内支持最快的案例与在 10 天内支持较慢但更通用的案例的问题。 (10 分钟/10 天是虚数,我只是想传达实现复杂性的规模差异)。

如果想要支持参数对象具体化(并可能泄漏)的情况,则需要考虑参数对象和参数之间的别名——这会改变为这些变量构造 SSA 形式的方式。出于类似的原因,这也使内联变得复杂。

一个更通用的参数对象方法应该基于逃逸分析/分配下沉 channel ——但 Crankshaft 在实现时没有类似的东西,它仍然需要至少支持一些参数操作的快速路径。

关于javascript - 优化参数有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198195/

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