Введите ваш адрес почты


sdcvoy.ru
Понравился сайт? Поделись с друзьями!
Главная » Javascript » Benchmarking-v-javascript

JavaScript benchmark

Совсем недавно я понятия не имел что за слово такое бенчмаркинг. Буквально три месяца назад я решил поменять телефон, естественно выбирать я пошёл «не с бухты барахты», а вполне осознано, прочитав отзывы и выбрав подходящую модель я её приобрёл. Так вот, к чему я виду, бороздив просторы интернета я как раз и наткнулся на такое понятие, как бенчмаркинг.

Бенчмаркинг в JSЕсли говорить по-простому бенчмаркинг — это сравнение каких-то параметров, оценка характеристик, сопоставление чему-либо. Возможно вы уже догадались, что речь пойдет о сравнении. Конечно мы не будем сравнивать производительность телефонов, ну а что же тогда, можно сравнивать в JavaScript? Ну например, можно сопоставить две функции и узнать, какая из них загружается быстрее. Если вернуться к аналогии к телефонам, то там сравниваются множество параметров. Давайте рассмотрим небольшой пример и воспользуемся объектом времени Date:

function dateNow() {
   Date.now() ;
}

function dateMs() {
 +new Date() ;
}

function bench(f) {
  var date = new Date();
  for (var i = 0; i < 10000; i++) f();
  return new Date() - date; // используем разность дат
}

alert( 'Время dateNow: ' + bench(dateNow) + 'мс' );
alert( 'Время dateMs: ' + bench(dateMs) + 'мс' );

По сути в данном примере у нас две одинаковые функции, вернее они обе возвращают дату в виде миллисекунд, но первая использующая метод Date.now() быстрее, потому что не создаёт промежуточный объект даты. А функция bench лишь определяет разницу между началом запуска функции и её завершением.

Но как показывает практика, на самом деле бывает так, что во время запуска какой-либо функции был параллельно запущен ещё какой-то посторонний процесс. Поэтому тот вариант, который был представлен выше уже не годится. Гораздо более точным сравнением будет, если мы прогоним наши функции много раз:

function dateNow() {
   Date.now() ;
}

function dateMs() {
 +new Date() ;
}

function bench(f) {
  var date = new Date();
  for (var i = 0; i < 10000; i++) f();
  return new Date() - date;
}
// bench для каждого теста запустим много раз, чередуя
var timeNow = 0,
  timeMs = 0;
for (var i = 0; i < 100; i++) {
  timeNow += bench(dateNow);
  timeMs += bench(dateMs);
}
alert( 'Время dateNow: ' + timeNow + 'мс' );
alert( 'Время dateMs: ' + timeMs + 'мс' );

Ну вот теперь другое дело. На самом деле в этой статье я использовал примитивные функции, в реальности они могут быть намного сложнее, хотелось лишь донести суть понятия «бенчмаркинг» и его использование в JavaScript.



наверх