什么是测量JavaScript引擎(如v8或spidermonkey)性能的准确方法?它应该至少不会对一个评估和另一个评估有很高的偏差,可能允许在不同操作系统和不同硬件配置的不同JavaScript引擎之间进行排名。在浏览器中测量和测试JavaScript引擎的处理能力
我的第一次尝试是在没有任何内容的网页上,我在网页浏览器中加载了该页面。然后我试图执行谷歌浏览器的JavaScript控制台这个代码,它出来了非常不同的,因为你会在结果中看到:
mean = function (distr) {
var sum = 0;
for (obs in distr) {
sum += distr[obs];
};
return sum/distr.length;
};
stdev = function (distr,mean) {
var diffsquares = 0;
for (obs in distr) {
diffsquares += Math.pow(distr[obs] - mean , 2);
};
return Math.sqrt((diffsquares/distr.length));
};
var OPs = 1000000;
var results = [];
for (var t = 0; t < 60; t++) {
var start = (new Date()).getTime();
for(var i = 0.5; i < OPs; i++){
i++;
}
var end = (new Date()).getTime();
var took = end - start;
var FLOPS = OPs/took;
results.push(FLOPS);
};
average = mean(results);
deviation = stdev(results,average);
console.log('Average: '+average+' FLOPS. Standart deviation: '+deviation+' FLOPS');
而且它的回答是:
0.5.0的NodeJS
- 平均:74607.30446024566 FLOPS。标准偏差: 4129.4008527666265 FLOPS
- 平均:73974.89765136827 FLOPS。 Standart 偏差:4574.367360870471 FLOPS
- 平均:73923.55086434036 FLOPS。 斯坦达特偏差:5768.396926072297 FLOPS
铬13.0.782.112(从控制台(Ctrl + Shift + j))
- 平均:1183.409340319158 FLOPS。标准偏差: 24.463468674550658 FLOPS
- 平均:1026.8727431432026 FLOPS。 Standart 偏差:18.32394087291766 FLOPS
- 平均:1063.7000331534252 FLOPS。非标准偏差:22.928786803808094 FLOPS
的Chrome 13.0.782.112(如网页)
- 平均:47547.03408688914 FLOPS。标准偏差:4064.7464541422833 FLOPS
- 平均值:49273.65762892078 FLOPS。标准偏差:1553.1768207400576 FLOPS
- 平均:47849.72703247966 FLOPS。非标准偏差:3445.930694070375 FLOPS
火狐6.0
- 平均:62626.63398692811 FLOPS。标准偏差: 3543.4801728588277 FLOPS
- 平均:85572.76057276056 FLOPS。 Standart 偏差:4336.354514715926 FLOPS
- 平均:63780.19323671495 FLOPS。 斯坦达特偏差:3323.648677036589 FLOPS
歌剧11.50
- 平均:38462.49044165712 FLOPS。标准偏差: 2438。527900104241 FLOPS
- 平均:37968.736460671964 FLOPS。 Standart 偏差:2186.9271687271607 FLOPS
- 平均:38638.1851173518 FLOPS。 标准偏差:1677.6876987114347 FLOPS
发生了一些奇怪的事情。 Chrome中的基准测试比其他浏览器和NodeJS中的基准测试需要更多的时间。我的意思是Chrome上的时间为30秒,其他时间为2秒。与其他游戏机相比,控制台上Chrome浏览器的标准偏差也非常小。为什么在控制台上执行代码和在网页中执行代码之间存在巨大差异?
如果这太愚蠢了让我提醒你我自己并不是很久以前就“学会了”javascript(以及一般的代码),所以我吮吸了很多东西。
这是什么措施?我想专注于数学运算的速度,而不是像正则表达式的速度。你建议什么?我也尝试生成10x10浮点数的矩阵并将它们相乘很多次,结果每次都是7,8或9 M FLOPS,但大多数情况下是7,如果它不是愚蠢的,并且有人希望代码I'很高兴能够贴上它。
有趣的阅读也许:http://ejohn.org/blog/accuracy-of-javascript-time/。 '结束 - 开始'是不可靠的。 – pimvdb
感谢:D!我很久以前就偶然发现过,当时并没有真正需要,并且忘记了那篇文章...... –
@pimvdb:它看起来只适用于应该在15ms以下运行的代码,但它看起来不是很可靠如果需要2秒,这是显着的[文章:这些浏览器中的任何测试运行的错误率将是巨大的。如果你有一个简单的测试,运行在15ms以下,错误率将高达50-750%!在安全地将浏览器的错误开销降低到1%之前,您需要至少运行750毫秒的测试。这是疯了,至少可以说。] –