Я получил странный результат теста, который я провел (Firefox Speci c) и Я хотел бы узнать больше о том, как / почему это результат.
Типичный результат выглядит следующим образом (10 миллионов элементов списка) (я запускал его несколько раз вручную, я не чувствовал, что нужно полностью использовать «модуль статистики»).
Результаты для Firefox 72.0.2 (64-разрядная версия) при Windows 7
itteration: 40 ms - timer stopped
__rounding: 14 ms - timer stopped
______ceil: 16 ms - timer stopped
_____floor: 15 ms - timer stopped
Наиболее странным является тест itteration
.
«Эффективный» itteration
код выглядит следующим образом: arrNumbers[index] = arrNumbers[index];
, и этот код является частью ВСЕХ тестов, но другие части имеют функцию Math
, обернутую вокруг правой части.
Так что швы, такие как itteration
, должны определять скорость для всех остальных тестов, я ожидал, что эта часть будет самой быстрой, а не самой медленной.
Сначала я подумал, что это «проблема» с числами с плавающей запятой, возможно, медленнее чем целые числа, поэтому я попытался назначить 1
(int), чтобы каждая функция работала с равными данными, но результат все тот же.
Код: (вероятно, не будет работать здесь, так как я использую console.time()
Я думаю. Но вы можете просто скопировать его как есть, в текстовый файл и изменить расширение файла на .html
и открыть его с помощью Firefox, нажмите F12, чтобы открыть инструмент контроля, и при необходимости перейдите на вкладку Console
.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title>Title</title>
</head>
<body>
<script>
function makeNrArray(loopSize) {
var arrNumbers = [];
for (let index = 0; index < loopSize; index++) {
arrNumbers[index] = 1; //Math.random();
}
return arrNumbers ;
}
function testItterationSpeed(arrNumbers) {
var arrLength = arrNumbers.length;
console.time("itteration");
for (let index = 0; index < arrLength; index++) {
arrNumbers[index] = arrNumbers[index];
}
console.timeEnd("itteration");
}
function testRoundingSpeed(arrNumbers) {
var arrLength = arrNumbers.length;
console.time("rounding");
for (let index = 0; index < arrLength; index++) {
arrNumbers[index] = Math.round(arrNumbers[index]);
}
console.timeEnd("rounding");
}
function testCeilingSpeed(arrNumbers) {
var arrLength = arrNumbers.length;
console.time("ceil");
for (let index = 0; index < arrLength; index++) {
arrNumbers[index] = Math.ceil(arrNumbers[index]);
}
console.timeEnd("ceil");
}
function testFlooringSpeed(arrNumbers) {
var arrLength = arrNumbers.length;
console.time("floor");
for (let index = 0; index < arrLength; index++) {
arrNumbers[index] = Math.floor(arrNumbers[index]);
}
console.timeEnd("floor");
}
var loopSize = 10000000; // <---- Settings ;)
let arrNumbers = makeNrArray(loopSize);
testItterationSpeed(arrNumbers);
arrNumbers = makeNrArray(loopSize);
testRoundingSpeed(arrNumbers)
arrNumbers = makeNrArray(loopSize);
testCeilingSpeed(arrNumbers);
arrNumbers = makeNrArray(loopSize);
testFlooringSpeed(arrNumbers);
</script>
</body>
</html>
Другие результаты:
Результаты для Firefox 72.0.2 (64-бит) (То же, что и выше, только для полноты и простоты сравнения)
itteration: 40 ms - timer stopped
__rounding: 14 ms - timer stopped
______ceil: 16 ms - timer stopped
_____floor: 15 ms - timer stopped
Firefox снова, , но теперь назначено 1,5 (float
) в качестве входных данных (вместо int
, как указано выше) (Math.random () дает аналогичный результат)
itteration: 67 ms - timer stopped
__rounding: 33 ms - timer stopped
______ceil: 34 ms - timer stopped
_____floor: 32 ms - timer stopped
Результаты для Google Chrome Версия 80.0.3987.106 (64 бита)
itteration: 11.7060546875 ms
__rounding: 12.194091796875 ms
______ceil: 11.73681640625 ms
_____floor: 11.551025390625 ms
Результаты для Inte rnet Explorer 11.0.9600 ..... Обновление: 11.0
itteration: 37,3 ms
__rounding: 203,5 ms
______ceil: 85,9 ms
_____floor: 85,7 ms