问题描述
测量像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 = []; (var t = 0; t var start =(new Date())。getTime();
for(var i = 0.5; i i ++;
}
var end =(new Date())。getTime();
var took = end - start;
var FLOPS = OPs / took;
results.push(FLOPS);
};
均值=均值(结果);
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 b
b Chrome 13.0.782.112(从控制台(Ctrl + Shift + J) p>
- 平均值: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,但大多数情况下是7,如果它不是愚蠢的,并且有人希望代码I' m很高兴pastebin它。
解决方案JS性能优化是一个广泛的领域,从头开始是相当雄心勃勃的。
如果我是你,我会看看这个空间的一些现有项目:
- 处理计时和统计分析(平均,计算差异)位。 >
- 允许任何人创建和运行测试,然后查看任何浏览器的结果。有大量的测试资源库供您阅读。
- 是JSPerf测试的结果存储,并跟踪每个UA的结果。
What is an accurate way to measure the performance of a javascript engine like v8 or spidermonkey ? It should at least have not very high deviations from one evaluation and another, probably allow to rank between different javascript engines on different operating systems and different hardware configurations.
My first attempt was this in a web page with nothing on it, I loaded that page in web browsers. Then I tried executing this code in Google Chrome's javascript console and it came out very different as you'll see in the results:
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');
And it replied:
NodeJS 0.5.0
- Average: 74607.30446024566 FLOPS. Standart deviation:4129.4008527666265 FLOPS
- Average: 73974.89765136827 FLOPS. Standartdeviation: 4574.367360870471 FLOPS
- Average: 73923.55086434036 FLOPS.Standart deviation: 5768.396926072297 FLOPS
Chrome 13.0.782.112 (From the Console (Ctrl+Shift+J))
- Average: 1183.409340319158 FLOPS. Standart deviation:24.463468674550658 FLOPS
- Average: 1026.8727431432026 FLOPS. Standartdeviation: 18.32394087291766 FLOPS
- Average: 1063.7000331534252FLOPS. Standart deviation: 22.928786803808094 FLOPS
Chrome 13.0.782.112 (as a webpage)
- Average: 47547.03408688914 FLOPS. Standart deviation: 4064.7464541422833 FLOPS
- Average: 49273.65762892078 FLOPS. Standart deviation: 1553.1768207400576 FLOPS
- Average: 47849.72703247966 FLOPS. Standart deviation: 3445.930694070375 FLOPS
Firefox 6.0
- Average: 62626.63398692811 FLOPS. Standart deviation:3543.4801728588277 FLOPS
- Average: 85572.76057276056 FLOPS. Standartdeviation: 4336.354514715926 FLOPS
- Average: 63780.19323671495 FLOPS.Standart deviation: 3323.648677036589 FLOPS
Opera 11.50
- Average: 38462.49044165712 FLOPS. Standart deviation:2438.527900104241 FLOPS
- Average: 37968.736460671964 FLOPS. Standartdeviation: 2186.9271687271607 FLOPS
- Average: 38638.1851173518 FLOPS.Standart deviation: 1677.6876987114347 FLOPS
Something strange happened. The benchmark in Chrome on the console took a lot more time than the ones in other browsers and NodeJS. I mean something like 30 seconds on Chrome versus 2 on others. The standart deviations in Chrome on the console are also very small compared to others. Why this huge difference between executing the code on the console and executing code in a webpage ?
If this is all too stupid let me remind you that I "learned" javascript (and to code in general) by myself and not very long ago, so I suck at a lot of things.
What is a good measure of this ? I'd like to focus on speed of math operations and not other things like regex speed. What do you recomend ? I also tryied generating 10x10 matrixes of floating point numbers and multiplying them lots of times, the result comes every time either 7, 8 or 9 M FLOPS, but mostly 7 on Chrome, if it's not stupid at all and someone wants the code I'm happy to pastebin it.
解决方案JS performance optimization is a huge area in general, and it's rather ambitious to start from scratch.
If I were you, I'd take a look at some existing projects around this space:
- Benchmark.js handles the timing and stats analysis (averaging, computing variance) bits.
- JSPerf lets anyone create and run tests and then look at results for any browser. There's q large repository of tests there that you can peruse.
- BrowserScope is the results storage for JSPerf tests, and tracks results per-UA.
这篇关于测量和基准测试浏览器中的JavaScript引擎的处理能力的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
- 平均值:1183.409340319158 FLOPS。标准偏差: