衡量诸如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
  • 平均: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
    快艇。标准偏差: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.68677036589 FLOPS

  • 歌剧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,如果这一点都不愚蠢,并且有人想要代码我我很乐意粘贴它。

    最佳答案

    一般而言,JS性能优化是一个巨大的 Realm ,并且从头开始相当雄心勃勃。

    如果我是你,我将看看这个 Realm 周围的一些现有项目:

  • Benchmark.js处理时序和统计信息分析(平均,计算方差)位。
  • JSPerf允许任何人创建和运行测试,然后查看任何浏览器的结果。您可以仔细阅读大量的测试库。
  • BrowserScope是JSPerf测试的结果存储,并跟踪每个UA的结果。
  • 08-19 03:44