Язык javascript ч 1

Page 264

[Открыть задачу в новом окне] Бенчмаркинг Допустим, у нас есть несколько вариантов решения задачи, каждый описан функцией. Как узнать, какой быстрее? Для примера возьмем две функции, которые округляют число:

1 function 2 return 3} 4 5 function return 6 число 7}

floorMath(x) { Math.floor(x);

floorXor(x) { x^0; // побитовое исключающее ИЛИ (XOR) всегда округляет

Чтобы померять, какая из них быстрее, нельзя запустить один раз floorMath, один раз floorXor и замерить разницу. Одноразовый запуск ненадежен, любая мини-помеха исказит результат. Для правильного бенчмаркинга функция запускается много раз, чтобы сам тест занял существенное время. Это сведет влияние помех к минимуму. Сложную функцию можно запускать 100 раз, простую — 1000 раз… Померяем, какая из функций округления быстрее:

01 function floorMath(x) { return Math.floor(x); } 02 function floorXor(x) { return x^0; } 03 04 function bench(f) { 05 var d = new Date(); 06 for (var i=0.5; i<1000000; i++) f(i); 07 return new Date() - d; 08 } 09 10 alert('Время floorMath: ' + bench(floorMath) + 'мс'); 11 alert('Время floorXor: ' + bench(floorXor) + 'мс'); В зависимости от браузера, может быть быстрее как floorXor так и floorMath. Многократное повторение функции — обязательно. Иначе измерения сильно подвержены помехам. Ещё более точные результаты можно получить,


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.