Динамическое изменение маршрута и циклическая зависимость с Mostjs

Очевидно, что xstream, с двумя методами addListener а также removeListener, может динамически перенаправлять потоки (изменять их источники и приемники). Я не вижу аналога с Mostjs. Позволяет ли вам только один раз выложить маршрутизацию потоков? Если да, то является ли это статичным характером, который позволяет большинству оптимизировать работу для достижения такой превосходной производительности?

Кроме того, xstream использует imitate метод, который позволяет ему иметь круговые зависимости. Есть ли способ достичь круговой зависимости с Mostjs?

2 ответа

Решение

В большинстве.js есть много функций, которые работают как на Source и Sink например, map(), который преобразует все события в потоке, действует как Sink потребляя события, и как Source при создании новых значений событий после применения к ним функций. observe() пример конкретного вида Sink который потребляет события и передает их функции, которую вы предоставляете.

Most.js Streams не активны, пока вы не используете их, используя один из "терминальных" комбинаторов, observe, drain, или же reduce, Когда вы звоните один из них, Stream посылает сигнал в Source-Sink цепь к Source в самом начале цепочки. Этот производитель Source затем начнет производить события.

События затем распространяются синхронно от Source сквозь Source-Sink цепочка простым вызовом метода.

Таким образом, вы можете предоставить свою собственную функцию "слушателя" map что бы преобразовать события.

Есть много факторов, влияющих на производительность большинства.

Простая архитектура распространения событий в стеке вызовов плюс подъем try/catch реализации комбинатора были двумя самыми ранними и самыми большими улучшениями производительности.

Most.js выполняет несколько других оптимизаций автоматически, основываясь на алгебраических эквивалентностях. Относительно известный пример - объединение нескольких map операции, например map(g, map(f, stream)) в один map делая функцию композиции на f а также g,

Операция также объединяет несколько filter операции, несколько merge операции, несколько take а также skip среди других. Эти оптимизации сокращают количество вызовов методов, необходимых для распространения события от производителя к потребителю.

Смотрите это интервью с Брайаном Кавалером

Сам Most.js не обрабатывает циклические зависимости, но это вполне возможно, используя most-proxy, Мотоцикл делает это, чтобы создать свой цикл в его run пакет.

Вы видели этот вопрос относительно xstream.jsimitate в most.js? https://github.com/cujojs/most/issues/308

Другие вопросы по тегам