Тема: Collection v4
Показать сообщение отдельно
  #1 (permalink)  
Старый 02.02.2014, 14:41
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Collection v4
Доделал 4-ю версию своего эпичного велосипеда Создал новый тред, т.к. по сравнению с прошлой версией было сделано оч много конфликтующих изменений.

https://github.com/kobezzza/Collection

Что это и зачем:
В JavaScript для массивов есть встроенные методы-итераторы, например, forEach, reduce и map и т.д. Их очень удобно использовать и они делают наш код нагляднее.

Данная либа позволяет юзать все те же методы + дополнительные для любых типов данных, а не только для массивов.
Также итераторы в Collection работают значительно быстрее нативных.

Также в этой либе реализован простой интерфейс для работы с хранилищами данных: localStorage, sessionStorage, indexedDB.

Итак:

По сравнению с прошлой версией было выпилено много лишнего (теперь сжатая либа - это всего 11.3 килобайта).

Теперь либа позиционируется как единый и очень навороченный API для функциональной работы с коллекциями данных, а не как блендер из кучи всего (как было раньше ).

Реализован единый прозрачный API для работы с хранилищами данных (localStorage, sessionStorage, indexedDB).

Реализован свой собственный JIT компилятор для итераторов, который позволяет увеличить до 10-ти раз производительность в сравнении с нативными методами во всех современных браузерах (применяемые оптимизации не делают работу за JIT VM JavaScript, а наоборот: дополняют те вещи, которые не могут быть оптимизированы нативным JIT). В древних браузерах этот эффект может быть ещё выше.

Переработаны интерфейсы методов для более простой и удобной работы.
Код переписан на ECMAScript6 (с транслятором)

Парочка примеров:

// Перебор элементов в обратном порядке начиная с 5-го
$C(document.querySelectorAll('.foo')).forEach(function (el) {
    ...
}, {
    reverse: true,
    startIndex: 5
});

// Вернуть массив всех чётных элементов исходного массива
$C([1, 2, 3, 4]).get(function (el) { return el % 2 === 0; });

// Cоздать новый объект на основе исходного,
// {a: 2, b: 4}
$C({a: 4, b: 16}).map(Math.sqrt);

// Загрузить коллекцию foo из локального хранилища
$C().load('foo');


О найденых багах пишите на гитхаб, вопросы можно задавать тут

ЗЫ: про отвратительную историю коммитов в курсе, буду исправляться
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 03.02.2014 в 20:29.
Ответить с цитированием