很明显,使用两种方法addListener
和removeListener
的xstream能够动态地重新路由流(更改其源和接收器)。我认为没有与大多数人相同的东西。大多数只让你布置一次流的路由吗?如果是这样,这种静态性质是什么让大多数人能够优化以获得如此优越的性能?
此外,xstream使用imitate
方法,使其具有循环依赖关系。有没有办法与mostjs实现循环依赖?
答案 0 :(得分:3)
在most.js中有许多函数可以同时运行Source
和Sink
,例如map()
,它会转换流中的所有事件,充当{ {1}}通过消费事件,并在向函数应用函数后生成新事件值时为Sink
。 Source
是一种消耗事件的特定observe()
的示例,并将它们传递给您提供的函数。
Most.js Sink
在您使用它们之前不会处于活动状态,方法是使用"终端"组合器,Streams
,observe
或drain
。当您拨打其中一个时,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
次操作,多个merge
和take
等。这些 优化减少了传播所需的方法调用次数 从生产者到消费者的事件。
See this interview with Brian Cavalier
Most.js本身不处理循环依赖,但完全可以使用most-proxy
。 Motorcycle执行此操作以在其skip
包中创建其循环。
答案 1 :(得分:0)
您是否在xstream.js
中看到了imitate
most.js
的这个问题?https://github.com/cujojs/most/issues/308