gpt4 book ai didi

JavaScriptCore 嵌套 "call"性能问题

转载 作者:IT王子 更新时间:2023-10-29 02:59:11 26 4
gpt4 key购买 nike

如果我定义一个函数

inc = function(x) { return x + 1 }

并对其进行嵌套调用

inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(1)))))))))))))))))))))

这将导致值 22。如果我修改嵌套表达式,改为使用 call,为 this 传入 null,如

inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, 1)))))))))))))))))))))

这也会产生值 22

但是,在 JavaScriptCore 上,第二种形式似乎会消耗 O(2^n) 内存,其中 n 是嵌套调用的数量.如果我在 Firefox 或 Chrome 中尝试此 JavaScript,则情况并非如此,因此它似乎与 JavaScriptCore 隔离。

我的 JavaScript 经验很少(几乎没有)。我对各种 JavaScript 实现可能做出的权衡没有感觉,也不知道示例代码在某些实现中昂贵(为闭包等提供通用支持)而在其他实现中高效是否合理。

我的问题是:这段代码本身就存在问题吗?是否应该以不同的方式重写它的结构?还是代码没问题——JavaScriptCore 只是有一个错误?

我做了一些实验,其中重构一些对临时对象的内部调用将“chop ”内存加倍行为

var temp1 = inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, 1)))))));

var temp2 = inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, temp1)))))));

inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, temp2)))))));

最佳答案

根据对这个问题的评论,一致认为所编写的代码没有根本问题,而是 JavaScriptCore 中的一个错误。

对于ticket filed ,已确认可重现,已导入苹果的Radar系统。

关于JavaScriptCore 嵌套 "call"性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27568249/

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