很明显,使用 和 两种方法的 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))成一个单独的操作。mapfg该操作还结合了多个
filter操作、多个merge操作、多个takeandskip等。这些优化减少了将事件从生产者传播到消费者所需的方法调用次数。
Most.js 本身不处理循环依赖,但完全可以使用most-proxy. 摩托车这样做是为了在其run包装中创建其循环。
你见过这个关于xstream.js imitatein 的问题most.js吗?https://github.com/cujojs/most/issues/308