衡量诸如v8或spidermonkey之类的javascript引擎性能的准确方法是什么?它至少应该与一个评估结果没有太大的偏差,可能允许在不同操作系统和不同硬件配置的不同javascript引擎之间进行排名。
我的第一次尝试是在一个没有任何内容的网页中,我将该网页加载到了网络浏览器中。然后,我尝试在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
4129.4008527666265 FLOPS
偏差:4574.367360870471 FLOPS
标准偏差:5768.396926072297 FLOPS
Chrome 13.0.782.112(从控制台(Ctrl + Shift + J))
24.463468674550658 FLOPS
偏差:18.32394087291766 FLOPS
快艇。标准偏差:22.928786803808094 FLOPS
Chrome 13.0.782.112(作为网页)
Firefox 6.0
3543.4801728588277 FLOPS
偏差:4336.354514715926 FLOPS
标准偏差:3323.68677036589 FLOPS
歌剧11.50
2438.527900104241 FLOPS
偏差:2186.9271687271607 FLOPS
标准偏差:1677.6876987114347 FLOPS
发生了一些奇怪的事情。控制台上的Chrome浏览器基准测试花费的时间比其他浏览器和NodeJS中的要多得多。我的意思是在Chrome上需要30秒,而在其他设备上则需要2秒。与其他版本相比,控制台上Chrome的标准偏差也很小。为什么在控制台上执行代码和在网页中执行代码之间存在巨大差异?
如果这一切都太愚蠢,让我提醒您,我是不久前就自己“学习”了javascript(并进行通用编码)的,所以我吸了很多东西。
有什么好的措施?我想专注于数学运算的速度,而不是正则表达式速度之类的其他东西。你有什么建议?我还尝试生成10x10的浮点数矩阵并将它们相乘很多次,结果每次出现7、8或9 M FLOPS时都会出现,但大多数情况下是在Chrome上出现7,如果这一点都不愚蠢,并且有人想要代码我我很乐意粘贴它。
最佳答案
一般而言,JS性能优化是一个巨大的 Realm ,并且从头开始相当雄心勃勃。
如果我是你,我将看看这个 Realm 周围的一些现有项目: