Цитата:
*** А по теме: Collection Работает быстрее итераторов, циклов и всех известных библиотек и со всеми возможными типами данных :) |
действительно
попробовал скорость filter и обычного цикла на большом массиве в Хроме, FF, IE11 у меня цикл быстрее в разы (см. в console) спасибо Aetae - не знал
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('filter');
myArr = arr.filter(function (item) {
return (item.key === needKey);
});
console.timeEnd('filter');
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));
|
Pavel M. никогда не делай бенчмарки через консоль отладчика, т.к. он отключает использование JIT компилятора и результат замеров может значительно отличаться.
|
Цитата:
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: Цитата:
|
Цитата:
|
Цитата:
Для тестирования именно скорости итераций лучше самом написать простой тест, как например тут https://github.com/kobezzza/Collecti...ter/benchmarks Цитата:
Я уже молчу про то, что нативные интерфейсы алгоритмически убоги и работают только с массивами. Очень частый пример, нужно сделать фильтр, потом мап, а потом взять первые 10 результатов, т.е. filter().map().slice() Алгоритмическая сложность просто ужасна, думаю всем это понятно. Гораздо лучше сделать:
map(..., {filter(), slice()})
Т.е. всё в один проход вместо 3-х |
Цитата:
Цитата:
|
Цитата:
С использованием либы Collection это будет выглядеть так:
$C(/* тут наш объект для итераций */).map(function () {
...
}, {
filter: function () {
...
},
from: 100,
count: 10
});
Цитата:
|
Цитата:
|
kobezzza,
Ну это потому что ты написал эту либу))) Я тоже таскаю некоторые свои штуки из проекта в проект) А подключать либу на 17кб просто чтобы не париться - неохота) Я и так не парюсь) |
| Часовой пояс GMT +3, время: 03:40. |