Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Collection v4 (https://javascript.ru/forum/project/44796-collection-v4.html)

kobezzza 07.02.2014 09:28

Цитата:

Сообщение от a.malitsky (Сообщение 296418)
kobezzza, не могу понять - либа тебе нужна по основной работе? Или тебе хватает энтузиазма делать её вместе с докой просто для себя, обучения и с призрачной надеждой что она станет популярной? Вы тут такой жути понаписали про оптимизацию что я могу только догадываться о количестве потраченных человеко-часов. Уже прежней версии нет, сайт сгинул, так ещё раз всё с нуля на гитхабе теперь написано...

Лично я в одном проекте уже третью версию использовал, сейчас буду применять четвёртую во втором.

Либа нужна мне (я её очень активно юзаю в своих проектах), пишу в первую очередь для себя. К сожалению у меня нет времени на раскрутку своего творения (не, если кто хочет помочь, то милости прошу :) ).

Про связь с прошлой версией: я не изменил ни концепцию ни структуру, а просто выкинул те вещи, которые не показали своей полезности на практике, т.е. с большой долей вероятности переход будет простым. Были конечно некоторые дизайнерские изменения в интерфейсах, но их не очень много.

Основные ломающие изменения:
1) Был выкинут кластер шаблонизации, т.к. он эволюционировал в отдельный мой проект Snakeskin.
2) Был убран SQL-парсер, т.к. на практике применять его у меня как то не очень вышло.
3) Выкинуты методы: stat, groupStat, copy, move, т.к. их легко создать на основе get/map/reduce/
4) Выкинуты некоторые вспомогательные методы, вроде resetCollection, вряд ли их кто использовал
5) push_ методы переименованы в add_.

Т.е. основная цель версии 4 была уменьшить кодовую базу и добиться высокой скорости создания/выполнения.

Теперь про сайт:
по хорошему нужно создать сайт-описание на гитхабе, а домен collection-js.com привязать к нему, но у меня правда нет на это времени, поэтому я его прикрыл пока, т.к. там содержится устаревшая дока и написал полностью новую доку на гитхабе. Если честно не вижу особых проблем с этим, т.к. какая разница где лежит дока.

Пиши вопросы: я всегда оперативно на них отвечаю.

kobezzza 07.02.2014 15:29

Выпустил обновление 4.0.3 с исправлениями некоторых найденых ошибок.

cyber 07.02.2014 18:13

Цитата:

Сообщение от kobezzza
Либа нужна мне (я её очень активно юзаю в своих проектах), пишу в первую очередь для себя. К сожалению у меня нет времени на раскрутку своего творения (не, если кто хочет помочь, то милости прошу ).

запили статью на хабре с описанием как либа работает, я думаю будет лучшая реклама:)

kobezzza 07.02.2014 18:17

Цитата:

Сообщение от cyber (Сообщение 296539)
запили статью на хабре с описанием как либа работает, я думаю будет лучшая реклама:)

Говорю же, мне некогда, реал завал с делами :( Если бы написать статью это было пару часов, то тогда да, но на практике статья это минимум 3-4 полных дня (я говорю про себя конечно же:)).

ЗЫ: чёто у мя сёня день релизов :) запил 4.1.0, где были улучшены интерфейсы методов indexOf, lastIndexOf, _drop.

cyber 07.02.2014 18:25

kobezzza, хотел спросить насчет реализации forEach, по сути этот метод только перебирает массивы и только по числовым индексам (без использования Object.keys или for in), почему он тогда медленнее подобной реализации (в хроме критически медленне) и что может не так быть в этой реализации?

function each(arr, callback, context) {
        for(var i = 0, leng = arr.length; i < leng; i++) {
            if(context)
                callback.call(context, arr[i], i, arr);
            else
              callback(arr[i], i, arr);
        }
    }

сделал тест ради интереса http://jsperf.com/each-test-speed

kobezzza 07.02.2014 18:39

Цитата:

Сообщение от cyber (Сообщение 296543)
kobezzza, хотел спросить насчет реализации forEach, по сути этот метод только перебирает массивы и только по числовым индексам (без использования Object.keys или for in), почему он тогда медленнее подобной реализации (в хроме критически медленне) и что может не так быть в этой реализации?

function each(callback, context) {
    var leng = this.length;
        for(var i = 0; i < leng; i++) {
            if(context)
                callback.call(context, this[i], i, this);
            else
              callback(this[i], i, this);
        }
    }

Если я правильно тебя понял, то ты спрашиваешь, почему Array.prototype.forEach медленнее твоей реализации?

На самом деле нельзя сказать точно: медленнее или нет, т.к. в некоторых случаях JIT VM может эффективно скомпилить тот или иной код, а иногда нет. Лучше всех на данный момент с такими оптимизациями справляется ИЕ11.

Но в большинстве случаев падение скорости в нативных методах связано с тем, что стандартные массивы в JS - это на самом деле не массивы, а просто сахар над хешом.

Цитата:

Сообщение от cyber (Сообщение 296543)
сделал тест ради интереса http://jsperf.com/each-test-speed

https://github.com/kobezzza/Collecti...aster/profiler

Но на самом деле forEach не то место, где нужно смотреть, т.к. он быстрый сейчас везде. Большая разница в производительности на всяких выборках (всякие map, filter и т.д.).

cyber 07.02.2014 18:46

Цитата:

Сообщение от kobezzza
Но на самом деле forEach не то место, где нужно смотреть

ну если верить jspref то разница в 98% в хроме, это не значитель?:blink:

kobezzza 07.02.2014 18:48

Цитата:

Сообщение от cyber (Сообщение 296545)
ну если верить jspref то разница в 98% в хроме, это не значитель?:blink:

JSperf запускает твой тест в цикле, т.е. по сути у тебя тестируется не скорость forEach, а скорость forEach внутри цикла и это уже другая история:)

Посмотри тесты, что я тебе привёл по ссылке:
https://github.com/kobezzza/Collecti...r/forEach.html сравнения forEach
https://github.com/kobezzza/Collecti...filer/get.html get vs filter
https://github.com/kobezzza/Collecti...WithCycle.html get vs filter внутри цикла

Чтобы склонить репозитарий
git clone [url]https://github.com/kobezzza/Collection[/url]

cyber 07.02.2014 19:05

сделал тест
Цитата:

forEach 402
each 120
$C().forEach 129

kobezzza 07.02.2014 19:20

Цитата:

Сообщение от cyber (Сообщение 296553)
сделал тест

Странный результат, но всяко может быть :)
http://screencast.com/t/kTWjV15n5 вот результат замеров в 3-х браузерах на моей машинке.

Хотя повторюсь, что эти тесты все искусственные.


Часовой пояс GMT +3, время: 21:28.