Показать сообщение отдельно
  #14 (permalink)  
Старый 14.08.2014, 13:04
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Сообщение от Pavel M. Посмотреть сообщение
действительно
попробовал скорость filter и обычного цикла на большом массиве
в Хроме, FF, IE11

у меня цикл быстрее в разы (см. в console)
спасибо Aetae - не знал
Потому что методика тестирования хромает. filter обходит весь массив, for — нет. Можно попробовать так:

var i,
	maxItems = 1e6,
	arr = [],
	needKey = 500137, // где-то в середине
	myArr;

// генерим массив
for (i = 0; i < maxItems; i += 1) {
  arr.push({key: i, label: i + ''});
}

// test filter
console.time('some');

myArr = [];
arr.some(function (item) {
  if (item.key === needKey) {
    myArr = [item];
    return true;
  }
  return false;
});

console.timeEnd('some');

alert(JSON.stringify(myArr));


// test цикл
myArr = [];

console.time('for');

for (i = 0; i < arr.length; i += 1) {
   if (arr[i].key === needKey) {
	  myArr.push(arr[i]);
	  break;
   }
}

console.timeEnd('for');

alert(JSON.stringify(myArr));


some у меня отрабатывает в полтора раза быстрее filter, но все еще в два раза медленнее, чем for:

Цитата:
some: 23.802ms VM1460:24
for: 14.023ms VM1460:41
Ответить с цитированием