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

cyber 30.11.2014 18:07

kobezzza, совсем по теме темы , но вопрос про генераторы это посути не совсем потоки, а что то типо sleep на сколько я понял, в чем их преймущество?

kobezzza 30.11.2014 18:10

Цитата:

Сообщение от cyber (Сообщение 343644)
kobezzza, совсем по теме темы , но вопрос про генераторы это посути не совсем потоки, а что то типо sleep на сколько я понял, в чем их преймущество?

Настоящие потоки - это тоже по сути sleep :)

Если сравнивать с WebWorker, то: https://github.com/kobezzza/Collecti...1%81-webworker

Ну и сама статья раскрывает суть: https://github.com/kobezzza/Collecti...%B2-Collection

Пример из жизни: у меня в проекте каждый UI элемент - это виджет, который живет своей жизнью: он принимает асинхронные сообщения, что-то считает и т.д. таких виджетов в среднем на странице 80-100 и часто возникает ситуация, когда "одновременно" сваливается куча асинхронных обработчиков и из-за этого фризится окно. Если разводить потоки вручную, т.е. делать специальный стек исполнения и т.д., то это требует дополнительных заморочек при написании самих виджетов и вообще геморой (я так раньше делал), а с появлением таких легких потоков - я просто отдаю это на откуп Collection и пишу код как обычно, но при этом фризы исчезли полностью и все просто летает.

cyber 30.11.2014 18:11

Цитата:

Сообщение от kobezzza
Если сравнивать с WebWorker, то: https://github.com/kobezzza/Collecti...1%81-webworker

Ох не фига себе, спасибо )

cyber 30.11.2014 18:13

kobezzza, А ты не думал написать большую статью о collection на хабре, о том как все внутри работает? Знаю ты много писал тут на форуме, но все как то разбросанно по темам

kobezzza 30.11.2014 18:20

Цитата:

Сообщение от cyber (Сообщение 343647)
kobezzza, А ты не думал написать большую статью о collection на хабре, о том как все внутри работает? Знаю ты много писал тут на форуме, но все как то разбросанно по темам

Думал, даже потихоньку делаю, но написании статьи сложная штука: либо пиши на фултайме (а для меня - это роскошь), либо потихоньку после работы, когда есть силы и желание, но это медленный процесс :)

cyber 30.11.2014 19:52

kobezzza, круто :)

cyber 03.12.2014 21:50

kobezzza, а выполнение в webworker не планируешь добавить?

kobezzza 03.12.2014 22:00

Цитата:

Сообщение от cyber (Сообщение 344287)
kobezzza, а выполнение в webworker не планируешь добавить?

Пока не планировал.

kobezzza 14.12.2014 18:33

Выпустил обновление: 5.4.14

cyber 17.12.2014 01:43

kobezzza, у меня твой collection выдает странную фигню при запуске на фантоме, при переборее коллекции .

этот цикл обернут другим циклом который перебирает коллекцию tr, tr 2 элемента поэтому 0 и 1.
но вот откуда 2 length ?

$C(tr.children).forEach( function ( elem, i ) {

                console.log( elem, i );

            } );


если перебирать так, то все хорошо.
[].forEach.call( tr.children, function ( elem )  {

                console.log ( elem );


    } );




Вывод:

Цитата:

CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length
CONSOLE: [object HTMLTableCellElement] 0
CONSOLE: [object HTMLTableCellElement] 1
CONSOLE: 2 length

kobezzza 17.12.2014 02:00

Он использует в примере стратегию for in, хотя по умолчанию для массивов и массиво подобных объектов должен использовать стратегию for, завтра проверю. Только в фантоме такое? Версия Collection последняя?

Стратегию можно задать явно.

https://github.com/kobezzza/Collecti...0%BE%D0%B2#use

$C(tr.children).forEach( function ( elem, i ) {
    console.log( elem, i );
}, {use: 'for'});


Завтра проверю и сделаю фикс, спс.

cyber 17.12.2014 02:13

kobezzza, вроде последнюю версию , дня 3 назад взял с гитхаба, только в фантоме, при запуске того же кода в браузере на той же странице все нормально. {use: 'for'} помогло и такой же баг при работе с другими коллекциями .
подключен файл collection.core.min.js

Использую фантом для ноды
https://github.com/sgentle/phantomjs-node

исходники для воспроизведения прикрепил ( на всякий случай, запускать ./parser/index.js )

kobezzza 17.12.2014 02:17

Оки, пасиб, завтра утром постараюсь всё починить.

cyber 17.12.2014 02:27

kobezzza,
только что взял https://github.com/kobezzza/Collecti...lection.min.js
баг воспроизводится

kobezzza 17.12.2014 13:32

Выкатил апдейт, в phantomJS почему то typeof от HTMLCollection давал function, а не object.

***

А почему ты не пользуешься bower или npm для загрузки пакетов?

bower install collection.js --save

// или

npm install collection.js --save


Потом для обновления пакетов можно просто делать:


bower update

// или

npm update


ЗЫ: предварительно в проекте нужно сделать будет bower init или npm init.

cyber 17.12.2014 13:32

kobezzza, а можно ли задать что объект перебирался с конца?

к примеру
{
x:1
y:3
s:5
}

начал перебор от s до x

cyber 17.12.2014 13:33

Цитата:

Сообщение от kobezzza
А почему ты не пользуешься bower или npm для загрузки пакетов?

использую и npm и bower)


kobezzza 17.12.2014 13:38

Цитата:

kobezzza, а можно ли задать что объект перебирался с конца
Конечно, для любых типов коллекций параметры итераций одинаковы: https://github.com/kobezzza/Collecti...%D 0%BE%D0%B2

Тебя нужен reverse.

$C({x: 1, y: 3, s: 5}).forEach(function () {
   ...
}, {reverse: true});


Тут правда есть нюанс: в стандарте не регламентировано сохранение порядка ключей в Object, поэтому в каждом браузере оно может реализовано по своему, но вот в Map порядок по стандарту задан (в порядке добавления).

cyber 17.12.2014 13:40

kobezzza, понял спасибо)

kobezzza 17.12.2014 14:24

Чёртов фантом, ещё багу нашёл в нём, выкатил патч.

Aetae 17.12.2014 21:37

Цитата:

Сообщение от kobezzza (Сообщение 346899)
Тут правда есть нюанс: в стандарте не регламентировано сохранение порядка ключей в Object, поэтому в каждом браузере оно может реализовано по своему, но вот в Map порядок по стандарту задан (в порядке добавления).

Недавно с удивлением узнал что в ES6 порядок таки регламентировали. Эх а ведь такая благодатная тема была.)

kobezzza 17.12.2014 21:53

Цитата:

Недавно с удивлением узнал что в ES6 порядок таки регламентировали. Эх а ведь такая благодатная тема была.)
Ну что же, это здорово :)

kobezzza 23.12.2014 16:19

Выпустил патч v5.4.19.

kobezzza 17.01.2015 12:53

Выпустил очередной патч.

l-liava-l 17.01.2015 16:22

http://www.solvy.com/

Угадай кто теперь использует ng-collection?

kobezzza 17.01.2015 16:52

Цитата:

Сообщение от l-liava-l (Сообщение 351860)
http://www.solvy.com/

Угадай кто теперь использует ng-collection?

Эммм?

l-liava-l 17.01.2015 17:11

Цитата:

Эммм?
Сервис для обучения детей математике с логами решений и репетиторами.

kobezzza 17.01.2015 17:17

Цитата:

Сообщение от l-liava-l (Сообщение 351872)
Сервис для обучения детей математике с логами решений и репетиторами.

Твой проект? Выглядит прикольно :)

Заюзали что ли мой Collection там или что?

stankura 23.02.2015 17:25

Кстати да, я тоже не понимаю, почему эта функция глобальная. Или тоже взять например btoa и atob - их же логично запихнуть в String. Они каждую спецификацию годами мучают, вроде должны всё обдумать, а всё равно странные вещи есть.

cyber 04.06.2015 17:33

kobezzza, слушай, для чего нужен этот код ?)
https://github.com/kobezzza/Collecti...Fcore%2Fgcc.js
Просто на первый взгял это выглядит безсмысленно
_.any = function (val) {
	return val;
};

kobezzza 04.06.2015 17:49

Цитата:

Сообщение от cyber (Сообщение 373839)
kobezzza, слушай, для чего нужен этот код ?)
https://github.com/kobezzza/Collecti...Fcore%2Fgcc.js
Просто на первый взгял это выглядит безсмысленно
_.any = function (val) {
	return val;
};

Это трюк для GCC, для приведения типов, в рантайме он не используется.

cyber 04.06.2015 17:57

Цитата:

Сообщение от kobezzza
Это трюк для GCC, для приведения типов

Можно подробнее?

kobezzza 04.06.2015 18:26

Цитата:

Сообщение от cyber (Сообщение 373844)
Можно подробнее?

http://javascript.ru/forum/node-js-i...tml#post346002

ТОТ_САМЫЙ 24.10.2015 03:55

Цитата:

Сообщение от kobezzza
Пример, функция которая преобразовывает dash-style в camelCase

лол, а вот код из тулбокса юишки

toJsStyle: (string)->
		if @isJsStyle(string)
			return string

		return string.trim().toLowerCase().replace /\-(\w)/img, (match, word)->
			return word.toUpperCase()


	toCssStyle: (string)->
		regExp = /[A-Z]/mg
		unless regExp.test(string)
			return string
		return string.trim().replace regExp, (word)->
			return '-' + word.toLowerCase()


	isJsStyle: (string)->
		if string.indexOf('-') isnt -1
			return false
		if string[0].toUpperCase() is string[0]
			return false
		if /[A-Z]/mg.test(string)
			return true
		return false

ТОТ_САМЫЙ 24.10.2015 04:45

Цитата:

Забыл ещё сказать, что Collection при работе в браузере старается запомнить информацию для оптимизации в локальном хранилище и при последующих запусках странички будет сразу работать с скомпилированном кодом, минуя анализ (можно открыть отладчик, развернуть head и увидеть там динамически вставленные теги скрипт).

В node.js пока такое не делается, в планах добавить в 5.1 версии.
ДА ТЫ ПОЕХАВШИЙ)!!! ШИКАРНО! Я ОХРЕНЕЛ АЖ)! Я ДУМАЛ ПРОСТО ТЫ ТАМ ИТЕРАТОРОВ ПОНАПИСАЛ И ВСЕ)), , шиарная идея кэшировать скомпиленные функции в сторджах, стырю эту фишку в выражения юишки котрые тоже компилируются

слыш а попробуй угарнуть, ты не обычную математику используй а бинарные операторы которые в разы быстрее работают))) ну или попробуй на асме написать все в 6 версии)

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

kobezzza 27.10.2015 13:40

Цитата:

ДА ТЫ ПОЕХАВШИЙ)!!! ШИКАРНО! Я ОХРЕНЕЛ АЖ)! Я ДУМАЛ ПРОСТО ТЫ ТАМ ИТЕРАТОРОВ ПОНАПИСАЛ И ВСЕ))
Ну как минимум ещё удобная абстракция потоков через генераторы.

Цитата:

слыш а попробуй угарнуть, ты не обычную математику используй а бинарные операторы которые в разы быстрее работают)))
Это миф.

Цитата:

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

nerv_ 27.10.2015 14:07

Цитата:

Сообщение от kobezzza
Это миф.

подтверждаю. Год назад специально изучал этот вопрос.

Цитата:

Сообщение от kobezzza
да и времени ща чёто ни на что нет.

тоже подтверждаю :D

Mаxmaxmаximus 30.10.2015 23:53

Цитата:

Сообщение от nerv_
подтверждаю. Год назад специально изучал этот вопрос.

Но приходил же чувак сюда, либу каку то сувал, там тесты делал, и мы все вначале ржали а потом офигевали, мы еще удивлялись как это мол вызов функии может быть быстрее банального 32323+43434343

kobezzza 11.07.2016 12:48

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

В общем из библиотеки было выкинуто всё, что не относится к итерациям, т.е. сейчас Collection - это микробиблиотека (всего 8кб полная сборка), которая предоставляет единый интерфейс для всех видов коллекций JS + гибкая настройка итераций (диапазон, направление, тип итератора и т.д.). А также Collection предоставляет невероятно удобную абстракцию легковесных потоков основанных на генераторах.

Итак:

1) Выкинута поддержка древних браузеров.
2) Полностью переработаны интерфейсы методов для более удобного использования.
3) Удалён весь "лишний" код, т.е. не относящийся к итерациям.
4) Удалён ряд методов итераций (их функционал делается через оставшиеся методы).
5) Метод filter теперь сам не осуществляет фильтрацию, а добавляет новый фильтр в операцию.

/// Всё будет сделано за один проход
$C(...)
  .filter(...)
  .filter(...)
  .filter(...)
  .filter(...)
  .map(...)


6) Все методы потоков теперь возвращают промисы и их оч удобно юзать с async-await

await $C(...).thread().forEach(...)


Тоже самое касается дочерних потоков.

В общем сегодня выпущу beta.1 и в течении нескольких недель стейбл релиз + дока. Также напишу короткую статью на хабр про реализацию потоков.

cyber 20.07.2016 23:11

kobezzza, я переодически заглядую в твой код, и интересно в чем преймущество использования https://github.com/kobezzza/Collecti...tors/thread.js
все такси всеравно выполняются на одном потоке, или я не так понял?


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