kobezzza, совсем по теме темы , но вопрос про генераторы это посути не совсем потоки, а что то типо sleep на сколько я понял, в чем их преймущество?
|
Цитата:
Если сравнивать с WebWorker, то: https://github.com/kobezzza/Collecti...1%81-webworker Ну и сама статья раскрывает суть: https://github.com/kobezzza/Collecti...%B2-Collection Пример из жизни: у меня в проекте каждый UI элемент - это виджет, который живет своей жизнью: он принимает асинхронные сообщения, что-то считает и т.д. таких виджетов в среднем на странице 80-100 и часто возникает ситуация, когда "одновременно" сваливается куча асинхронных обработчиков и из-за этого фризится окно. Если разводить потоки вручную, т.е. делать специальный стек исполнения и т.д., то это требует дополнительных заморочек при написании самих виджетов и вообще геморой (я так раньше делал), а с появлением таких легких потоков - я просто отдаю это на откуп Collection и пишу код как обычно, но при этом фризы исчезли полностью и все просто летает. |
Цитата:
|
kobezzza, А ты не думал написать большую статью о collection на хабре, о том как все внутри работает? Знаю ты много писал тут на форуме, но все как то разбросанно по темам
|
Цитата:
|
kobezzza, круто :)
|
kobezzza, а выполнение в webworker не планируешь добавить?
|
Цитата:
|
Выпустил обновление: 5.4.14
|
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 ); } ); Вывод: Цитата:
|
Он использует в примере стратегию 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'}); Завтра проверю и сделаю фикс, спс. |
kobezzza, вроде последнюю версию , дня 3 назад взял с гитхаба, только в фантоме, при запуске того же кода в браузере на той же странице все нормально. {use: 'for'} помогло и такой же баг при работе с другими коллекциями .
подключен файл collection.core.min.js Использую фантом для ноды https://github.com/sgentle/phantomjs-node исходники для воспроизведения прикрепил ( на всякий случай, запускать ./parser/index.js ) |
Оки, пасиб, завтра утром постараюсь всё починить.
|
|
Выкатил апдейт, в 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. |
kobezzza, а можно ли задать что объект перебирался с конца?
к примеру { x:1 y:3 s:5 } начал перебор от s до x |
Цитата:
![]() |
Цитата:
Тебя нужен reverse. $C({x: 1, y: 3, s: 5}).forEach(function () { ... }, {reverse: true}); Тут правда есть нюанс: в стандарте не регламентировано сохранение порядка ключей в Object, поэтому в каждом браузере оно может реализовано по своему, но вот в Map порядок по стандарту задан (в порядке добавления). |
kobezzza, понял спасибо)
|
Чёртов фантом, ещё багу нашёл в нём, выкатил патч.
|
Цитата:
|
Цитата:
|
Выпустил патч v5.4.19.
|
Выпустил очередной патч.
|
|
Цитата:
|
Цитата:
|
Цитата:
Заюзали что ли мой Collection там или что? |
Кстати да, я тоже не понимаю, почему эта функция глобальная. Или тоже взять например btoa и atob - их же логично запихнуть в String. Они каждую спецификацию годами мучают, вроде должны всё обдумать, а всё равно странные вещи есть.
|
kobezzza, слушай, для чего нужен этот код ?)
https://github.com/kobezzza/Collecti...Fcore%2Fgcc.js Просто на первый взгял это выглядит безсмысленно _.any = function (val) { return val; }; |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
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 |
Цитата:
слыш а попробуй угарнуть, ты не обычную математику используй а бинарные операторы которые в разы быстрее работают))) ну или попробуй на асме написать все в 6 версии) ну точнее ты можешь либо компилировать в асм функции (если хватит мозгов конечно, но ты умный), либо можешь саму либу написать на асме, и просто внутри обычными сишными циклами все проходить, и ни че компилировать не придется, они и так бинарные. удачи ;) |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
На днях психанул и переписал всю билиотеку с нуля ЖВ 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 и в течении нескольких недель стейбл релиз + дока. Также напишу короткую статью на хабр про реализацию потоков. |
kobezzza, я переодически заглядую в твой код, и интересно в чем преймущество использования https://github.com/kobezzza/Collecti...tors/thread.js
все такси всеравно выполняются на одном потоке, или я не так понял? |
Часовой пояс GMT +3, время: 15:26. |