在浏览器中测量和基准测试javascript引擎的处理能力

Joã*_*imo 3 javascript firefox benchmarking google-chrome node.js

什么是衡量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');
Run Code Online (Sandbox Code Playgroud)

它回答说:

NodeJS 0.5.0

  1. 平均值:74607.30446024566 FLOPS.标准偏差:4129.4008527666265 FLOPS
  2. 平均值:73974.89765136827 FLOPS.标准偏差:4574.367360870471 FLOPS
  3. 平均值:73923.55086434036 FLOPS.标准偏差:5768.396926072297 FLOPS

Chrome 13.0.782.112(从控制台(Ctrl + Shift + J))

  1. 平均值:1183.409340319158 FLOPS.标准偏差:24.463468674550658 FLOPS
  2. 平均值:1026.8727431432026 FLOPS.标准偏差:18.32394087291766 FLOPS
  3. 平均值:1063.7000331534252 FLOPS.标准偏差:22.928786803808094 FLOPS

Chrome 13.0.782.112(作为网页)

  1. 平均值:47547.03408688914 FLOPS.标准偏差:4064.7464541422833 FLOPS
  2. 平均值:49273.65762892078 FLOPS.标准偏差:1553.1768207400576 FLOPS
  3. 平均值:47849.72703247966 FLOPS.标准偏差:3445.930694070375 FLOPS

Firefox 6.0

  1. 平均值:62626.63398692811 FLOPS.标准偏差:3543.4801728588277 FLOPS
  2. 平均值:85572.76057276056 FLOPS.标准偏差:4336.354514715926 FLOPS
  3. 平均值:63780.19323671495 FLOPS.标准偏差:3323.648677036589 FLOPS

歌剧11.50

  1. 平均值:38462.49044165712 FLOPS.标准差:2438.527900104241 FLOPS
  2. 平均值:37968.736460671964 FLOPS.标准偏差:2186.9271687271607 FLOPS
  3. 平均值:38638.1851173518 FLOPS.标准差:1677.6876987114347 FLOPS

发生了一件奇怪的事.Chrome控制台上的基准测试比其他浏览器和NodeJS中的基准测试花了更多的时间.我的意思是Chrome上的30秒,而其他的则是2秒.与其他产品相比,Chrome在控制台上的标准偏差也非常小.为什么在控制台上执行代码和在网页中执行代码之间存在巨大差异?

如果这太愚蠢了,让我提醒你,我自己"学习"了javascript(以及一般的代码)而不是很久以前,所以我很多东西都很糟糕.

有什么好处呢?我想专注于数学运算的速度,而不是像正则表达速度这样的其他东西.你有什么建议的?我还尝试生成10x10浮点数矩阵并将它们乘以很多次,结果每次都是7,8或9 M FLOPS,但在Chrome上大多数是7,如果它根本不是愚蠢而有人想要代码我'我高兴地把它粘贴吧.

Bor*_*mus 7

JS性能优化通常是一个巨大的领域,从头开始是相当雄心勃勃的.

如果我是你,我会看看这个空间周围的一些现有项目:

  • Benchmark.js处理时序和统计分析(平均,计算方差)位.
  • JSPerf允许任何人创建和运行测试,然后查看任何浏览器的结果.那里有q个大型测试存储库,你可以仔细阅读.
  • BrowserScope是JSPerf测试的结果存储,并跟踪每UA的结果.