很明显,使用 和 两种方法的 xstreamaddListener
能够removeListener
动态地重新路由流(更改它们的源和接收器)。我看不到 mostjs 的等价物。大多数只让您布置一次流的路由吗?如果是这样,这种静态特性是否允许大多数 js 优化以获得如此卓越的性能?
此外,xstream 使用了一种imitate
方法,使其具有循环依赖关系。有没有办法用mostjs实现循环依赖?
很明显,使用 和 两种方法的 xstreamaddListener
能够removeListener
动态地重新路由流(更改它们的源和接收器)。我看不到 mostjs 的等价物。大多数只让您布置一次流的路由吗?如果是这样,这种静态特性是否允许大多数 js 优化以获得如此卓越的性能?
此外,xstream 使用了一种imitate
方法,使其具有循环依赖关系。有没有办法用mostjs实现循环依赖?
most.js 中有许多函数同时作用于 aSource
和 a Sink
,例如 ,map()
它转换流中的所有事件,Sink
通过消费事件充当 a ,并Source
在将函数应用于它们后产生新的事件值时充当 a 。是消费事件并将它们传递给您提供的函数observe()
的特定类型的示例。Sink
大多数.jsStreams
在你使用它们之前是不活动的,通过使用“终端”组合符之一observe
,,,drain
或reduce
。当您调用其中一个时,将链中Stream
的信号发送到Source-Sink
链Source
的最开始处。然后该生产者Source
将开始生产事件。
然后通过简单的方法调用从Source
整个链同步传播事件。Source-Sink
因此,您可以提供自己的“监听器”函数来map
转换事件。
影响 most.js 性能的因素有很多。
简单的调用堆栈事件传播架构,加上
try/catch
组合器实现的提升是最早和最大的两个性能改进。Most.js 基于代数等价自动执行其他几个优化。一个比较知名的例子是通过在和上进行函数组合,将多个
map
操作组合map(g, map(f, stream))
成一个单独的操作。map
f
g
该操作还结合了多个
filter
操作、多个merge
操作、多个take
andskip
等。这些优化减少了将事件从生产者传播到消费者所需的方法调用次数。
Most.js 本身不处理循环依赖,但完全可以使用most-proxy
. 摩托车这样做是为了在其run
包装中创建其循环。
你见过这个关于xstream.js
imitate
in 的问题most.js
吗?https://github.com/cujojs/most/issues/308