什么是测量像v8或spidermonkey这样的javascript引擎性能的准确方法?该方法至少不应该有很高的从一个评估到另一个评估的偏差,可能允许在不同操作系统和硬件配置上对不同的javascript引擎进行排名。
我的第一次尝试是在一个没有内容的网页中加载此代码,并在Web浏览器中打开该页面。然后,我尝试在Google Chrome的JavaScript控制台中执行此代码,并且结果非常不同,您将在结果中看到:
我的第一次尝试是在一个没有内容的网页中加载此代码,并在Web浏览器中打开该页面。然后,我尝试在Google Chrome的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');
它回答道:
NodeJS 0.5.0
- 平均值:74607.30446024566 FLOPS。标准偏差: 4129.4008527666265 FLOPS
- 平均值:73974.89765136827 FLOPS。标准偏差: 4574.367360870471 FLOPS
- 平均值:73923.55086434036 FLOPS。标准偏差: 5768.396926072297 FLOPS
Chrome 13.0.782.112(来自控制台(Ctrl+Shift+J))
- 平均值:1183.409340319158 FLOPS。标准偏差: 24.463468674550658 FLOPS
- 平均值:1026.8727431432026 FLOPS。标准偏差: 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
Firefox 6.0
- 平均值:62626.63398692811 FLOPS。标准偏差: 3543.4801728588277 FLOPS
- 平均值:85572.76057276056 FLOPS。标准偏差: 4336.354514715926 FLOPS
- 平均值:63780.19323671495 FLOPS。标准偏差: 3323.648677036589 FLOPS
Opera 11.50
- 平均值:38462.49044165712 FLOPS。标准偏差: 2438.527900104241 FLOPS
- 平均值:37968.736460671964 FLOPS。标准偏差: 2186.9271687271607 FLOPS
- 平均值:38638.1851173518 FLOPS。标准偏差: 1677.6876987114347 FLOPS
发生了一些奇怪的事情。在Chrome的控制台中进行基准测试所需的时间比其他浏览器和NodeJS中所需的时间要长得多。我的意思是,在Chrome上需要大约30秒,而在其他浏览器上只需要2秒。与其他浏览器相比,Chrome控制台中的标准偏差也非常小。为什么在控制台执行代码和在网页中执行代码之间会有如此巨大的差异?
如果这太愚蠢了,请让我提醒您,我是自学javascript(以及编码)的,并且还不久。
这有什么好的衡量方法吗?我想重点关注数学运算速度,而不是其他事情,例如正则表达式速度。你推荐什么?我还尝试生成了大量的浮点数10x10矩阵并将它们相乘,结果每次都是7、8或9 M FLOPS,但在Chrome上通常是7。如果这看起来不傻,有人想要这段代码,我很高兴将其发布到pastebin上。