Комментарии 15
А console.time хуже?
0
Не хуже, но если важна точность измерений, то нужно использовать performance.now()
Почитать про точность временных функций можно в этой статье
Почитать про точность временных функций можно в этой статье
0
Статья требует апдейта из комментариев к оригиналу.
Во-первых, в последнем примере sort() без параметром сортирует числа как строки, что может привести к абсолютно неверному нахождению медианы.
Во-вторых, isIn2 быстрее, чем isIn1, а не наоборот. Почему ошибся автор? Он запускал код в CodePen, который в каждый цикл внедряет специальный код, не позволящий уйти в бесконечность. Так что мир не перевернулся, не пугайтесь: цикл for быстрее, чем forEach.
Так что лучший способ сделать свой код быстрее — подумать головой, измерить и подумать еще раз)
Во-первых, в последнем примере sort() без параметром сортирует числа как строки, что может привести к абсолютно неверному нахождению медианы.
Во-вторых, isIn2 быстрее, чем isIn1, а не наоборот. Почему ошибся автор? Он запускал код в CodePen, который в каждый цикл внедряет специальный код, не позволящий уйти в бесконечность. Так что мир не перевернулся, не пугайтесь: цикл for быстрее, чем forEach.
Так что лучший способ сделать свой код быстрее — подумать головой, измерить и подумать еще раз)
+9
В моих собственных тестах (локально, без codepen) цикл forEach частенько оказывается быстрее. Не всегда, но частенько.
0
По примеру из статьи.
лиса и хром:
isIn1 took 0.0050
isIn2 took 0.0000
ИЕ:
isIn1 took 0.0088
isIn2 took 0.0040
нода (через process.hrtime())
isIn1 took 0.0060
isIn2 took 0.0026
Статья вводит в заблуждение.
лиса и хром:
isIn1 took 0.0050
isIn2 took 0.0000
ИЕ:
isIn1 took 0.0088
isIn2 took 0.0040
нода (через process.hrtime())
isIn1 took 0.0060
isIn2 took 0.0026
Статья вводит в заблуждение.
+3
Статья говорит:
лучший способ сделать свой код быстрее — измерить и сравнить
Так что, чтоб знать наверняка, нужно взять и сравнить, а не писать что статья неправильная и врет.
0
Так что, чтоб знать наверняка, нужно взять и сравнить
Именно это и было сделано. Не однократно и на разных конфигах.
Ваш скриншот вызывает недоумение и желание узнать в чем и на чем это было сделано.
0
Если запускалось в codepen то вам нужно прочитать комментарий arusakov
К слову это то что выполняет codepen
function isIn1(haystack, needle) {
var found = false;
haystack.forEach(function (element) {
if (element.toLowerCase() === needle.toLowerCase()) {
found = true;
}
});
return found;
}
function isIn2(haystack, needle) {
for (var i = 0, len = haystack.length; i < len; i++) {
if (window.CP.shouldStopExecution(1)) {
break;
}
if (haystack[i].toLowerCase() === needle.toLowerCase()) {
return true;
}
}
return false;
window.CP.exitedLoop(1);
}
console.log(isIn1([
'a',
'b',
'c'
], 'B'));
console.log(isIn1([
'a',
'b',
'c'
], 'd'));
console.log(isIn2([
'a',
'b',
'c'
], 'B'));
console.log(isIn2([
'a',
'b',
'c'
], 'd'));
function median(sequence) {
sequence.sort();
return sequence[Math.ceil(sequence.length / 2)];
}
function measureFunction(f) {
var letters = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'.split(',');
var numbers = [];
for (var i = 0; i < letters.length; i++) {
if (window.CP.shouldStopExecution(2)) {
break;
}
var t0 = performance.now();
f(letters, letters[i]);
var t1 = performance.now();
numbers.push(t1 - t0);
}
window.CP.exitedLoop(2);
console.log(f.name, 'took', median(numbers).toFixed(4));
}
measureFunction(isIn1);
measureFunction(isIn2);
0
я просто в хрому открыл ссылку из статьи 2 раза, в первый раз результаты были одинаковы, во второй сделал скрин.
0
Так статья врет. И самое ужасное то, что кто-то действительно прочитает ее, не будет читать комментарии здесь или к оригиналу и пойдет по своему коду изменять for на forEach с твердой уверенностью, что все делает правильно.
+1
Разве Date не в юникс-таймстампе время держит, которое тоже от перевода на летнее время не меняется?
0
По мне так профилировщик (если он есть) куда больше подходит для анализа производительности и поиска узких мест.
А вот скажем для сбора статистики от конечных пользователей вполне себе интересный вариант.
А вот скажем для сбора статистики от конечных пользователей вполне себе интересный вариант.
0
Возможно, читателям пригодится интересный ресурс для сравнения скорости алгоритмов: jsPerf — JavaScript performance playground.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Измерение производительности функций в JavaScript