什麼是測量JavaScript引擎(如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 = [];
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');
而且它的回答是:
0.5.0的NodeJS
- 平均:74607.30446024566 FLOPS。標準偏差: 4129.4008527666265 FLOPS
- 平均:73974.89765136827 FLOPS。 Standart 偏差:4574.367360870471 FLOPS
- 平均:73923.55086434036 FLOPS。 斯坦達特偏差:5768.396926072297 FLOPS
鉻13.0.782.112(從控制檯(Ctrl + Shift + j))
- 平均:1183.409340319158 FLOPS。標準偏差: 24.463468674550658 FLOPS
- 平均:1026.8727431432026 FLOPS。 Standart 偏差: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
火狐6.0
- 平均:62626.63398692811 FLOPS。標準偏差: 3543.4801728588277 FLOPS
- 平均:85572.76057276056 FLOPS。 Standart 偏差:4336.354514715926 FLOPS
- 平均:63780.19323671495 FLOPS。 斯坦達特偏差:3323.648677036589 FLOPS
歌劇11.50
- 平均:38462.49044165712 FLOPS。標準偏差: 2438。527900104241 FLOPS
- 平均:37968.736460671964 FLOPS。 Standart 偏差:2186.9271687271607 FLOPS
- 平均:38638.1851173518 FLOPS。 標準偏差:1677.6876987114347 FLOPS
發生了一些奇怪的事情。 Chrome中的基準測試比其他瀏覽器和NodeJS中的基準測試需要更多的時間。我的意思是Chrome上的時間爲30秒,其他時間爲2秒。與其他遊戲機相比,控制檯上Chrome瀏覽器的標準偏差也非常小。爲什麼在控制檯上執行代碼和在網頁中執行代碼之間存在巨大差異?
如果這太愚蠢了讓我提醒你我自己並不是很久以前就「學會了」javascript(以及一般的代碼),所以我吮吸了很多東西。
這是什麼措施?我想專注於數學運算的速度,而不是像正則表達式的速度。你建議什麼?我也嘗試生成10x10浮點數的矩陣並將它們相乘很多次,結果每次都是7,8或9 M FLOPS,但大多數情況下是7,如果它不是愚蠢的,並且有人希望代碼I'很高興能夠貼上它。
有趣的閱讀也許:http://ejohn.org/blog/accuracy-of-javascript-time/。 '結束 - 開始'是不可靠的。 – pimvdb
感謝:D!我很久以前就偶然發現過,當時並沒有真正需要,並且忘記了那篇文章...... –
@pimvdb:它看起來只適用於應該在15ms以下運行的代碼,但它看起來不是很可靠如果需要2秒,這是顯着的[文章:這些瀏覽器中的任何測試運行的錯誤率將是巨大的。如果你有一個簡單的測試,運行在15ms以下,錯誤率將高達50-750%!在安全地將瀏覽器的錯誤開銷降低到1%之前,您需要至少運行750毫秒的測試。這是瘋了,至少可以說。] –