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

7wp*_*7wp 44 reactive-programming rxjs knockout.js

有谁知道RxJsKnockout之间的区别?从表面上看,他们似乎试图解决同样的问题,构建一个事件驱动的UI.但是有过两种经验的人,他们有什么不同/他们有什么相似之处?你能描述一些关于它们的东西来帮助我选择吗?

Ben*_*nor 62

史蒂夫(Knockout的创造者)在他的博客上解释了它的不同之处:

我对JavaScript的Rx非常熟悉,最近在一个大项目上大量使用它,事实上Knockout设计的各个方面都考虑到了我的Rx体验.

Knockout实现观察者模式和Rx之间的关键区别在于Knockout会自动从常规过程代码中推断出observable之间的关联和依赖关系,而无需通过特殊的功能API预先指定它们.我希望Knockout使用常规的程序/命令式代码,因为它对大多数开发人员来说更熟悉和平易近人.

另一个区别是Rx针对没有状态的事件流进行了优化.起初我对此及其功能纯度充满热情,但过了一段时间后,我感觉越来越像是在跳过尴尬的箍,不得不发明额外的方法来模拟状态来有效地管理UI命令.这就是为什么,在Knockout中,所有可观察对象都可以被视为有状态 - 例如,你总是可以读取它们的最新值(顺便说一句,它是缓存的 - 在基础数据发生变化之前它不会重新计算).

Rx比Knockout更进一步构建事件流的高级方法,而Knockout比Rx更进一步进入UI开发,让你将它的observable绑定到HTML DOM元素和模板,并以你想要的任何方式操作它们.Rx很擅长它的功能,但事实并非如此,我想要构建丰富的UI - 因此Knockout的设计.


Ric*_*lay 21

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

RxJs提供了一种针对异步流(如事件和Web请求)组合操作的方法,并包括组合流等高级方案(当A和B都出现时,启动它,但如果再次出现A或B则取消它)

Knockout是一个MVVM框架,允许您通过映射其功能的模型来管理用户界面的状态.这样可以将视图的逻辑与视图分开.

  • 我只是想说明你现在可以在Rx-和Ko-Observables之间架起桥梁.请看:https://github.com/cburgdorf/Knockout-Rx/blob/master/app/App.ViewModels.SearchViewModel.js (15认同)