Knockout.js和Rx.js有什么区别?

有谁知道RxJs和Knockout之间的区别? 对我来说,他们似乎试图解决同样的问题,build立一个事件驱动的用户界面。 但是,有两个经验的人,他们有什么不同/他们是如何相似? 你能描述一些关于他们的东西来帮助我select吗?

史蒂夫(Knockout的创造者)在他的博客中解释了这个差异 :

我对Rx for JavaScript非常熟悉,最近在大型项目中大量使用它,事实上Knockoutdevise的各个方面都是以我的Rx经验为基础。

Knockout的观察者模式和Rx的实现之间的主要区别在于Knockout自动推断来自常规过程代码的可观察事件之间的关联和依赖关系,而不必通过特殊的function性API在前面指定它们。 我希望Knockout使用常规的程序/命令式代码,因为它对大多数开发人员来说更为熟悉和平易近人。

另一个不同之处在于Rx针对没有状态的事件stream进行了优化。 起初,我对这个和它的function纯度很热心,但是过了一段时间,我越来越觉得我正在跳跃着尴尬的环境,不得不发明更多的方法来模拟状态来高效地pipe理UI命令。 这就是为什么在Knockout中,所有可观察对象都可以被看作是有状态的 – 例如,你总是可以读取它们的最新值(顺便说一下,它不会被重新计算,直到底层数据发生变化)。

Rx比Knockout更进一步,成为组合事件stream的高级方式,而Knockout比UI更深入到UI开发中,让您将其可观察对象绑定到HTML DOM元素和模板,并以任何您想要的方式操纵它们。 Rx很擅长它,但结果并不是我想要构build丰富的用户界面(UI) – 因此devise了Knockout。

他们实际上是完全不同的框架,虽然我可以看到为什么你会看到交叉:

RxJs提供了一种针对asynchronousstream(如事件和Web请求)的操作组合方式,还包括组合stream等高级scheme(当A和B都发生时,启动此操作,但是如果A或B再次出现则取消)

Knockout是一个MVVM框架,允许您通过映射function的模型来pipe理用户界面的状态。 这允许您的视图的逻辑与您的视图分开。