Mar*_*ahn 38 javascript google-chrome
当有人发布了一个jsperf基准测试时,我遇到了一个非常有趣的问题,该基准测试与先前的,几乎相同的基准测试相冲突.
Chrome 在这两行之间做了一些截然不同的事情:
new Array(99999); // jsperf ~50,000 ops/sec
new Array(100000); // jsperf ~1,700,000 ops/sec
Run Code Online (Sandbox Code Playgroud)
基准:http://jsperf.com/newarrayassign/2
我想知道是否有人知道这里发生了什么!
(为了澄清,我正在寻找关于V8内部的一些低级细节,例如它使用不同的数据结构,一个与另一个以及这些结构是什么)
eyk*_*nal 53
只是因为这听起来很有趣,我在V8代码库中搜索了一个定义为100000的静态,我发现了这个kInitialMaxFastElementArray随后在内置ArrayConstructInitializeElements函数函数中使用的var.虽然我不是程序员并且不知道这里的细节,但你可以看到它正在使用一个if循环来确定它是否小于100,000,并return根据它在不同的点上进行.
nai*_*sts 10
当您设计适应数据大小的算法时,总会有一些阈值数(例如,当您将1000个项添加到列表时,SharePoint会更改其工作方式).因此,猜测是您已经找到实际数字并且性能不同,因为使用了不同的数据结构或算法.
| 归档时间: |
|
| 查看次数: |
1134 次 |
| 最近记录: |