JavaScriptCore 嵌套的“调用”性能问题
JavaScriptCore nested "call" performance issue
如果我定义一个函数
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
,则传入null
用于this
,作为
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 只是有一个错误吗?
我做过一些实验,重构一些对临时的内部调用将"截断"内存加倍行为
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中的一个错误。
对于提交的票证,它已被确认为可复制的,并已导入Apple的雷达系统。
相关文章:
- 使用正则表达式评估电子邮件地址时出现性能问题
- 在循环中附加事件处理程序时出现浏览器性能问题
- 角度指令性能问题
- 奇怪的Kineticjs性能问题
- 使用HTML和JS的iPhone游戏中的性能问题,以及appMobi
- 菜单性能问题
- 性能问题:通用选择器与单独绑定
- 离子框架移动应用程序性能问题
- 性能问题高图表图和 socket.io
- 样式 DOM 上的 $.before() 性能问题
- Ajax发布到PHP脚本,每5秒查询一次MySQL数据库的性能/问题
- 循环的 JavaScript 性能问题
- 性能问题:存储对DOM元素的引用与使用选择器相比
- 很多主干视图-性能问题
- jquery性能问题,操作注册
- 在web工作者、快速定时器和$scope中遇到AngularJS性能问题$apply()
- 使用pixi和p5声音库制作的听觉反应视觉效果的性能问题
- 更多的 DOM 元素会产生性能问题
- 主要面临性能问题
- HTML 大图像性能问题