使用Mostjs进行动态重新路由和循环依赖

时间:2017-07-11 13:32:28

标签: xstream-js mostjs

很明显,使用两种方法addListenerremoveListener的xstream能够动态地重新路由流(更改其源和接收器)。我认为没有与大多数人相同的东西。大多数只让你布置一次流的路由吗?如果是这样,这种静态性质是什么让大多数人能够优化以获得如此优越的性能?

此外,xstream使用imitate方法,使其具有循环依赖关系。有没有办法与mostjs实现循环依赖?

2 个答案:

答案 0 :(得分:3)

在most.js中有许多函数可以同时运行SourceSink,例如map(),它会转换流中的所有事件,充当{ {1}}通过消费事件,并在向函数应用函数后生成新事件值时为SinkSource是一种消耗事件的特定observe()的示例,并将它们传递给您提供的函数。

Most.js Sink在您使用它们之前不会处于活动状态,方法是使用"终端"组合器,Streamsobservedrain。当您拨打其中一个时,reduce会在Stream链中向信号链的最开头的Source-Sink发送信号。那个制作人Source将开始制作事件。

然后通过简单的方法调用将事件从Source同步传播到Source链。

因此,你可以提供自己的"听众"函数Source-Sink将改变事件。

有许多因素促成了most.js的表现。

  

简单的调用堆栈事件传播架构,以及提升   组合器实现中的map是最早的两个   和最大的性能改进。

     

Most.js基于自动执行其他几项优化   代数等价。一个比较着名的例子是组合   多个try/catch操作,例如map,进入   通过在map(g, map(f, stream))map上执行功能组合来单f

     

该操作还结合了多个g个操作,多个   filter次操作,多个mergetake等。这些   优化减少了传播所需的方法调用次数   从生产者到消费者的事件。

See this interview with Brian Cavalier

Most.js本身不处理循环依赖,但完全可以使用most-proxyMotorcycle执行此操作以在其skip包中创建其循环。

答案 1 :(得分:0)

您是否在xstream.js中看到了imitate most.js的这个问题?https://github.com/cujojs/most/issues/308