Кому-нибудь интересно FRP?
Или я зря распинаюсь?)
Угарное видео для привлечение внимания: http://www.youtube.com/watch?v=SyWFvn0I6m8#t=10 |
Цитата:
|
Не заразился фрп?)
|
мне интересно, но слабо представляю, как это использовать
|
"Как в икселе" это про екзель что ли?
|
Вика уделила термину буквально упоминание, но я ввел оы вместо js и первой оказалась ссылка на тот самый хабр. Который начал с немецким акцентом:
когда становиться совершенно непонятно Задача разработчика сводиться к тому По итогу получается Сейчас бы хотелось перейти конец цитат, после чего аффтар внезапно переходит на jQuery которому сбагривается все то же самое с тем же количеством условных проверок. Кто-нить помнит как на десктопе программируются клавиши клавы? А, да, фронтирная статья тут http://habrahabr.ru/post/198656/ |
> мне интересно, но слабо представляю, как это использовать
Очень просто, только описываешь не реакцию на события, а зависимости между данными. Тут есть пример простейшего приложения: http://javascript.ru/forum/project/4...-s-tobojj.html |
Цитата:
|
наверное, нужно больше туториалов. в примере с TODO я ничего не понял :)
|
Бекон - это вообще не frp. Это те же самые события, со всеми их минусами, но завернутые в потоки.
|
Цитата:
У него есть свойство current - флаг указывающий, что этот таск сейчас выделен. Объявляем мы его просто: $jin.atom.prop({ '$jin.task.view.item..current': { pull: function( ){ return this.list().task() === this.task() } }}) То есть, берем список в котором отображается вьюшка, смотрим у него текущую задачу и если она совпадает с нашей, то значит вьюшку надо выделить как текущую. При этом нам не надо ни подписываться ни на какие события, ни писать где либо в другой части приложения код для обновления состояния этой вьюшки. Значение этого атома всегда остаётся актуальным. |
ui поддерживает frp :D
|
Ты так и не рассказал каким образом)
|
function Controller() { a = 10 b = 20 c = (a + b) // 30 say = function() { a++; alert( c ) // 31 } } и вообще-то я рассказал, это называется формулы. я же писал в том топике. с это ячейка которая связана с ячейками a и b по формуле a+b или вот например, ячейка form динамичски пересчитывается при обращении к ней. и выдает заполненный обьект. function Controller() { name = 'Ашот' age = 11 form = ({ name: name, age : age }) sendForm = function() { $http( 'api.php?sendForm', form ) } } |
А, ну это твой собствнный язык. Он хоть тьюринг-полный?)
|
Цитата:
function Controller() { var $$self = this; $$self.a = 10 $$self.b = 20 $cell( 'c', function() { return $$self.a + $$self.b } ) } скобочки это просто небольшой сахар) и кстати, я не понял как утверждение "это твой язык" опровергает поддержку FRP? Ведь оно ПОДТВЕРЖДАЕТ поддержку FRP. Я добавил сахарный способ создания формул, и способ этот похож на синтаксис клажуры. |
Ой, да у тебя дигест как в ангуляре.. смерть на больших данных)
|
ну не знай, 5000 ватчеров проверяет 20 миллисекунд на пеньке 4) а вот то что смерть это лишь твоя диванная теория, неболее)
п.с. дайджест блять, дайджест) Цитата:
|
У меня как в нокауте, большее потребление памяти, но и не перелопачивается вся коллекция на каждый чих.
Допустим, задача: есть список на 50000 задач. Задачи имеют название, описание, статус, список ответственных пользователей, запланированную дату, приоритет. Нужно сортировать по алфавиту, по дате с группировками (на сегодня, на этой неделе, просроченные) и (по приоритетам плюс завершенные - самый низкий приоритет). Любой параметр задачи можно в любой момент изменить и задача должна перелетать на правильное место в списке. Будет от 200мс на каждый чих?) |
да, но таких список обычно не бывает по этому это не страшно.
или бывает? я напомню что перелопачивается только то, что собирается рисоваться в html. у тебя и вручную созданные 50000 дивов будут тупить. По этому это не проблема. На списках размером 1000-2000 перелопачивание не заметно для пользователя. Оно дольше чем в нокаутах но все таки не заметно, так что не страшно. Разумеется в будущем я думаю оптимизировать это, ну так, чтобы приятно было мне. Сделаю полифил для Object.observe геттерами и сеттерами. и буду использовать его за место $digest. пока такой способ перелопачивания я нахоэу проиемлемым так как в реальности не бывает случаев когда надо перелопатить больше 5000 элементов массива, и такое перелопачивание занимает меньше 10 миллисекунд на моем слабом компьютере pentium 4 |
> да, но таких список обычно не бывает по этому это не страшно.
Бывает, пример более чем реален. Но данных у каждой задачи гораздо больше, чем я перечислил. > у тебя и вручную созданные 50000 дивов будут тупить. Единовременно отображаются лишь 20 задач. Вопрос лишь в том, какие из них показать. Для этого нужно иметь их список в правильном порядке с указанными смещениями. |
Цитата:
Цитата:
|
> а пруф можно какой нить?
wrike.com > это все легко пододается оптимизации ты что/))) говорю же, ПРОВЕРЯЕТСЯ ТОЛЬКО ТО, что РИСУЕТСЯ. Тебе пример показать? Ещё раз: чтобы понять какие 20 задач рисовать из 50000 нужно их отсортировать, чтобы отсортировать нужно иметь актуальные данные по некоторым полям. В зависимости от сортировки набор полей разный. |
отсортировка происходит не через $digest !!!!!!
ты можешь сделать так ng:repeat="item in arr | filter(name)" тогда ты охуеешь от происходящих тормозов, если заведомо предполагается что в списке будет много, то нужна оптимизация, и ты должен фильтровать массив не в шаблоне а в контроллере??? - НЕТ, ты должен создать специальную директиву для такого списка. и фильтрацию производить там. (но у меня будут просто умные фильтры, это тоже одна из вещей которая у меня лучшечем в ангуляре, у меня есть функция которую написал чувак с ником Сyber, которая с молнеиносной скоростью находит новые добавленные элементы в массив, и ТОЛЬКО ОНИ будут пропускаться через фильтр.) |
А при чём тут новые элементы? Меняются значения в одной задаче и от этого меняется ее позиция в списке задач. Чтобы правильно отсортировать список надо узнать обо всех изменениях во всех задачах. Чтобы узнать не поменялось ли что-то в какой-либо из задач при дигесте нужно пробежаться по всем задачам с глупым вопросом "а не изменилось ли у тебя чо?"
|
а есть какой-то другой способ отсортировать не пробегаясь по всем?
|
Отсортировать-то не проблема, если построить индекс и знать какие задачи изменились. Но чтобы узнать, что что-то поменялось при дигесте надо пробегаться по всем задачам.
|
не используй дайджест для этого, фильтруй руками там где это критично, что мешает?
|
Я и не использую дигест, вообще) $jin.atom не имеет подобных проблем принципиально.
|
Цитата:
|
function Controller() { a = 10 b = 20 c = (a + b) // 30 say = function() { a++; alert( c ) // 31 } } Это называется byRef; На php мне в стопицот раз проще нарисовать: // запрос к бд, забираем результ $d = $res->fetch_all(); $res->close(); $f = array(); // transpose foreach($d as $row_index => &$row) foreach($row as $col_index => &$value) $f[$col_index][$row_index]=$value; Ну вот, $d(ata) датой, а в $f(ields) та же самая дата но повернутая на 90, со строк - в колонки. Манипулируйте через $f значениями в $d. Или перестройте $f еще каким-то подходящим для конкретной задачи образом. |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 14:51. |