RxJS和IxJS有什么区别,什么时候我要在另一个上使用?
从IxJS文档中:
RxJS非常适合基于事件的工作流,在这些工作流中,数据可以按生产者的速率进行推送,但是IxJS非常适合I / O操作,在此情况下,作为消费者的用户可以在准备就绪时提取数据。
通过文档会后,唯一的主要区别似乎是概念Iterables在IxJS和观测量的RxJS。
Iterable和Observable都可以同步或异步执行,并且与几乎相同的创建者函数配对时.forEach
,from IxJS的.subscribe
方法与RxJS的方法基本相同from
。唯一的不同是IxJS的.forEach
方法是可选的,因为您可以改用命令式for-of
。
似乎有两个库无缘无故,因为RxJS的from
creator函数可以将Iterables转换为Observables。
在我看来,它不是真正的IxJS和RxJS,而是Iterables和Observables。它们有何不同?何时使用彼此之间的差异?
RxJS会在值到达后立即对其进行处理。这是一个推送系统。
IxJS指定何时传递下一个值。这是一个拉动系统。
IxJS
如果要具有基于拉的模型,例如在处理背压时,可能会有所帮助。
如您在文档中所见:
IxJS统一了基于同步和异步基于pull的集合,就像RxJS统一了基于push的集合的世界一样。RxJS非常适合基于事件的工作流,在这些工作流中,数据可以按生产者的速率进行推送,但是IxJS非常适合I / O操作,在此情况下,作为消费者的用户可以在准备就绪时提取数据。
换一种说法:
RxJS
,如果你的制作人(通常是用户)是比较慢的数据处理(这是很常见的前端)。IxJS
,如果你的制作人(通常System)是速度远远超过你可以处理数据(后端多见)。要了解这意味着什么,请考虑以下示例:
您需要构建ETL管道并处理一个大文件(大约1TB)。
如果使用RxJS编写,则类似:
readFileByLineObservable('path/to/file')
.pipe(
doSomeHeavyTransformation(),
)
.subscribe()
然后readFileByLineObservable
尝试尽快将1TB的整个文件“推”到RAM中。只有在这种情况发生之后,您才可以开始做doSomeHeavyTransformation
。这个问题称为背压。
相反,IxJS
仅在处理前一行后才尝试“拉”每个换行。在这种情况下,这是最佳的处理方法。
区别在于RxJS.subscribe
设置侦听器的方式,而IxJS.forEach
告诉其迭代器何时提供下一个值(仅在处理完第一个值之后。它类似于RxJS的concatMap
和concatAll
运算符,但不相同)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句