Какой точный способ измерить производительность движка javascript, такого как v8 или spidermonkey?По крайней мере, он должен иметь не очень большие отклонения от одной оценки и другой, возможно, позволять ранжировать различные движки javascript в разных операционных системах и на разных аппаратных конфигурациях.
Моя первая попытка была на веб-странице, где ничего не былоэто, я загрузил эту страницу в веб-браузерах.Затем я попытался выполнить этот код в консоли JavaScript Google Chrome, и он получился совсем другим, как вы увидите в результатах:
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 ФЛОП.Стандартное отклонение: 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 ФЛОП
- Среднее: 1063.7000331534252 ФЛОП.Стандартное отклонение: 22,928786803808094 FLOPS
Chrome 13.0.782.112 (как веб-страница)
- Среднее: 47547.03408688914 FLOPS.Стандартное отклонение: 4064,7464541422833 FLOPS
- Среднее: 49273,65762892078 FLOPS.Стандартное отклонение: 1553,1720207400576 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 ФЛОП
- Среднее: 38638,1851173518 ФЛОП.Стандартное отклонение: 1677,6876987114347 ШАГИ
Произошло что-то странное.Тестирование в Chrome на консоли заняло намного больше времени, чем в других браузерах и NodeJS.Я имею в виду что-то вроде 30 секунд на Chrome против 2 на других.Стандартные отклонения в Chrome на консоли также очень малы по сравнению с другими.Почему такая огромная разница между выполнением кода на консоли и выполнением кода на веб-странице?
Если это слишком глупо, напомню, что я «выучил» javascript (и вообще кодировать) сам ине так давно, поэтому я много сосу.
Что хорошего в этом?Я хотел бы сосредоточиться на скорости математических операций, а не на других вещах, таких как скорость регулярных выражений.Что вы рекомендуете?Я также попытался сгенерировать матрицы 10x10 чисел с плавающей точкой и умножить их много раз, результат приходит каждый раз, когда 7, 8 или 9 М FLOPS, но в основном это 7 в Chrome, если это совсем не глупо, и кто-то хочет код, который яЯ счастлив вставить его.