Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Кому-нибудь интересно FRP? (https://javascript.ru/forum/misc/44815-komu-nibud-interesno-frp.html)

tenshi 03.02.2014 13:15

Кому-нибудь интересно FRP?
 
Или я зря распинаюсь?)

Угарное видео для привлечение внимания:
http://www.youtube.com/watch?v=SyWFvn0I6m8#t=10

nerv_ 03.02.2014 13:34

Цитата:

Я тут с ходу LISP вам в голову
:)

tenshi 03.02.2014 13:54

Не заразился фрп?)

melky 03.02.2014 14:10

мне интересно, но слабо представляю, как это использовать

kostyanet 03.02.2014 14:45

"Как в икселе" это про екзель что ли?

kostyanet 03.02.2014 14:56

Вика уделила термину буквально упоминание, но я ввел оы вместо js и первой оказалась ссылка на тот самый хабр. Который начал с немецким акцентом:

когда становиться совершенно непонятно

Задача разработчика сводиться к тому

По итогу получается

Сейчас бы хотелось перейти

конец цитат, после чего аффтар внезапно переходит на jQuery которому сбагривается все то же самое с тем же количеством условных проверок.

Кто-нить помнит как на десктопе программируются клавиши клавы?

А, да, фронтирная статья тут http://habrahabr.ru/post/198656/

tenshi 03.02.2014 17:26

> мне интересно, но слабо представляю, как это использовать

Очень просто, только описываешь не реакцию на события, а зависимости между данными. Тут есть пример простейшего приложения: http://javascript.ru/forum/project/4...-s-tobojj.html

tenshi 03.02.2014 17:28

Цитата:

Сообщение от kostyanet (Сообщение 295573)
"Как в икселе" это про екзель что ли?

excel

melky 03.02.2014 17:40

наверное, нужно больше туториалов. в примере с TODO я ничего не понял :)

tenshi 03.02.2014 17:47

Бекон - это вообще не frp. Это те же самые события, со всеми их минусами, но завернутые в потоки.

tenshi 03.02.2014 18:48

Цитата:

Сообщение от melky (Сообщение 295611)
наверное, нужно больше туториалов. в примере с TODO я ничего не понял :)

Ну вот например вью-модель задачи в списке задач: https://github.com/nin-jin/pms-jin/b...ew_item.jam.js

У него есть свойство current - флаг указывающий, что этот таск сейчас выделен.

Объявляем мы его просто:

$jin.atom.prop({ '$jin.task.view.item..current':
{   pull: function( ){
		return this.list().task() === this.task()
	}
}})


То есть, берем список в котором отображается вьюшка, смотрим у него текущую задачу и если она совпадает с нашей, то значит вьюшку надо выделить как текущую. При этом нам не надо ни подписываться ни на какие события, ни писать где либо в другой части приложения код для обновления состояния этой вьюшки. Значение этого атома всегда остаётся актуальным.

Maxmaxmaximus7 04.02.2014 00:26

ui поддерживает frp :D

tenshi 04.02.2014 01:30

Ты так и не рассказал каким образом)

Maxmaxmaximus7 04.02.2014 02:00

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 )
    }

}

tenshi 04.02.2014 02:38

А, ну это твой собствнный язык. Он хоть тьюринг-полный?)

Maxmaxmaximus7 04.02.2014 02:45

Цитата:

Сообщение от tenshi
ну это твой собствнный язык

не сказал бы что это язык) обычные "сниппеты") это можно записать и руками

function Controller() {

    var $$self = this;

    $$self.a = 10
    $$self.b = 20
    $cell( 'c', function() { return $$self.a + $$self.b } )

}



скобочки это просто небольшой сахар) и кстати, я не понял как утверждение "это твой язык" опровергает поддержку FRP? Ведь оно ПОДТВЕРЖДАЕТ поддержку FRP. Я добавил сахарный способ создания формул, и способ этот похож на синтаксис клажуры.

tenshi 04.02.2014 02:51

Ой, да у тебя дигест как в ангуляре.. смерть на больших данных)

Maxmaxmaximus7 04.02.2014 03:23

ну не знай, 5000 ватчеров проверяет 20 миллисекунд на пеньке 4) а вот то что смерть это лишь твоя диванная теория, неболее)

п.с. дайджест блять, дайджест)

Цитата:

Сообщение от tenshi
у тебя дигест как в ангуляре

а что ты предлагаешь? и приведи пример смерти на больших данных

tenshi 05.02.2014 01:17

У меня как в нокауте, большее потребление памяти, но и не перелопачивается вся коллекция на каждый чих.

Допустим, задача: есть список на 50000 задач. Задачи имеют название, описание, статус, список ответственных пользователей, запланированную дату, приоритет. Нужно сортировать по алфавиту, по дате с группировками (на сегодня, на этой неделе, просроченные) и (по приоритетам плюс завершенные - самый низкий приоритет). Любой параметр задачи можно в любой момент изменить и задача должна перелетать на правильное место в списке.

Будет от 200мс на каждый чих?)

Maxmaxmaximus7 05.02.2014 11:27

да, но таких список обычно не бывает по этому это не страшно.
или бывает? я напомню что перелопачивается только то, что собирается рисоваться в html. у тебя и вручную созданные 50000 дивов будут тупить.
По этому это не проблема. На списках размером 1000-2000 перелопачивание не заметно для пользователя. Оно дольше чем в нокаутах но все таки не заметно, так что не страшно. Разумеется в будущем я думаю оптимизировать это, ну так, чтобы приятно было мне. Сделаю полифил для Object.observe геттерами и сеттерами. и буду использовать его за место $digest.

пока такой способ перелопачивания я нахоэу проиемлемым так как в реальности не бывает случаев когда надо перелопатить больше 5000 элементов массива, и такое перелопачивание занимает меньше 10 миллисекунд на моем слабом компьютере pentium 4

tenshi 05.02.2014 16:24

> да, но таких список обычно не бывает по этому это не страшно.

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

> у тебя и вручную созданные 50000 дивов будут тупить.

Единовременно отображаются лишь 20 задач. Вопрос лишь в том, какие из них показать. Для этого нужно иметь их список в правильном порядке с указанными смещениями.

Maxmaxmaximus7 05.02.2014 16:35

Цитата:

Сообщение от tenshi
Бывает, пример более чем реален

а пруф можно какой нить?

Цитата:

Сообщение от tenshi
Единовременно отображаются лишь 20 задач. Вопрос лишь в том, какие из них показать. Для этого нужно иметь их список в правильном порядке с указанными смещениями.

это все легко пододается оптимизации ты что/))) говорю же, ПРОВЕРЯЕТСЯ ТОЛЬКО ТО, что РИСУЕТСЯ. Тебе пример показать?

tenshi 05.02.2014 16:51

> а пруф можно какой нить?

wrike.com

> это все легко пододается оптимизации ты что/))) говорю же, ПРОВЕРЯЕТСЯ ТОЛЬКО ТО, что РИСУЕТСЯ. Тебе пример показать?

Ещё раз: чтобы понять какие 20 задач рисовать из 50000 нужно их отсортировать, чтобы отсортировать нужно иметь актуальные данные по некоторым полям. В зависимости от сортировки набор полей разный.

Maxmaxmaximus7 05.02.2014 18:01

отсортировка происходит не через $digest !!!!!!

ты можешь сделать так

ng:repeat="item in arr | filter(name)" тогда ты охуеешь от происходящих тормозов, если заведомо предполагается что в списке будет много, то нужна оптимизация, и ты должен фильтровать массив не в шаблоне а в контроллере??? - НЕТ, ты должен создать специальную директиву для такого списка. и фильтрацию производить там.

(но у меня будут просто умные фильтры, это тоже одна из вещей которая у меня лучшечем в ангуляре, у меня есть функция которую написал чувак с ником Сyber, которая с молнеиносной скоростью находит новые добавленные элементы в массив, и ТОЛЬКО ОНИ будут пропускаться через фильтр.)

tenshi 05.02.2014 19:02

А при чём тут новые элементы? Меняются значения в одной задаче и от этого меняется ее позиция в списке задач. Чтобы правильно отсортировать список надо узнать обо всех изменениях во всех задачах. Чтобы узнать не поменялось ли что-то в какой-либо из задач при дигесте нужно пробежаться по всем задачам с глупым вопросом "а не изменилось ли у тебя чо?"

Maxmaxmaximus7 05.02.2014 20:27

а есть какой-то другой способ отсортировать не пробегаясь по всем?

tenshi 06.02.2014 00:36

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

Maxmaxmaximus7 06.02.2014 01:08

не используй дайджест для этого, фильтруй руками там где это критично, что мешает?

tenshi 06.02.2014 20:11

Я и не использую дигест, вообще) $jin.atom не имеет подобных проблем принципиально.

kostyanet 06.02.2014 20:20

Цитата:

Сообщение от tenshi
Бекон

Бакен.

kostyanet 06.02.2014 20:37

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 еще каким-то подходящим для конкретной задачи образом.

tenshi 07.02.2014 14:39

Цитата:

Сообщение от kostyanet (Сообщение 296381)
Бакен.

Бекон прикольнее)

tenshi 07.02.2014 14:41

Цитата:

Сообщение от kostyanet (Сообщение 296386)
Это называется byRef; На php мне в стопицот раз проще нарисовать:

Нет, это о другом. Присмотрись внимательней.


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