Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
c = a.length)/** Результаты:
*
* Firefox 4beta:
* loop: 115
* clbk: 184
*
* Chrome 8:
* loop: 53
* clbk: 60
*/
var loop = function (array) {
var result = [];
for (var i = 0, c = array.length; i < c; i++) {
var t = array[i];
if (t < 2.236067) {
result.push(t * t);
}
}
return result;
};
var callback = function (array) {
return array
.filter(function (t) {
return t < 2.236067;
})
.map(function (t) {
return t * t;
});
};
var createArray = function () {
return [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10];
};
var index, time = {}, start;
start = Date.now();
for (index = 20000; index--;) window.test_lp = loop(createArray());
time.loop = Date.now() - start;
start = Date.now();
for (index = 20000; index--;) window.test_cb = callback(createArray());
time.clbk = Date.now() - start;
alert('loop: ' + time.loop + '\n' + 'clbk: ' + time.clbk);
var callback = function (array) {
return array
.map ( function (t) t * t; )
.filter( function (t) t > 5; )
};
В третий раз пишу что тут тестирование разных подходов — высокоуровневый vs низкоуровневый (эксперимент не чист я признаю), прочите, плиз, комменты до конца.
Я не говорил что в 20 раз. Медленнее до 20 раз в сафари (от 3 раз в фф)
> Результат просто сгорает.
Не повлияет на конечный результат.
Однако место их объявления решает исход теста.
Верить хрому не стоит у него JIT компиллер он читерит в бенчмарках.
Вы в своих бенчмарках делаете многое лишнего — 40к вызовов левых функций, которые растворяют результат.
x = 5 + 5;
x = mysql("SELECT 5+5");
var res = [];
a.forEach(function (t) {
if(t >= 2.236067)
res.push(t * t);
});
Оптимизация JavaScript: Scope, Low level ES vs ES5 Array methods