0

很明显,使用 和 两种方法的 xstreamaddListener能够removeListener动态地重新路由流(更改它们的源和接收器)。我看不到 mostjs 的等价物。大多数只让您布置一次流的路由吗?如果是这样,这种静态特性是否允许大多数 js 优化以获得如此卓越的性能?

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

4

2 回答 2

3

most.js 中有许多函数同时作用于 aSource和 a Sink,例如 ,map()它转换流中的所有事件,Sink通过消费事件充当 a ,并Source在将函数应用于它们后产生新的事件值时充当 a 。是消费事件并将它们传递给您提供的函数observe()的特定类型的示例。Sink

大多数.jsStreams在你使用它们之前是不活动的,通过使用“终端”组合符之一observe,,,drainreduce。当您调用其中一个时,将链中Stream的信号发送到Source-SinkSource的最开始处。然后该生产者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包装中创建其循环。

于 2017-08-26T20:49:13.607 回答
0

你见过这个关于xstream.js imitatein 的问题most.js吗?https://github.com/cujojs/most/issues/308

于 2017-08-08T22:58:50.267 回答