web-dev-qa-db-ja.com

Knockout.jsとRx.jsの違いは何ですか?

RxJsノックアウト の違いを知っている人はいますか?表面的には、イベント駆動型UIを構築するために、同じ問題を解決しようとしているように見えます。しかし、両方の経験がある人は、どのように違いますか/どのように似ていますか?私が選ぶのを助けるためにそれらについて何か説明できますか?

44
7wp

スティーブ(ノックアウトの作成者) 違いを説明しました 彼のブログで:

私はRxfor JavaScriptに非常に精通しており、最近大きなプロジェクトでRxを頻繁に使用しています。実際、Knockoutの設計の側面は、私のRxの経験を念頭に置いて作成されています。

Knockoutのオブザーバーパターンの実装とRxの実装の主な違いは、Knockoutは、特別な機能APIを介して事前に指定しなくても、通常の手続き型コードからオブザーバブル間の関連付けと依存関係を自動的に推測することです。 Knockoutは、ほとんどの開発者にとってより親しみやすく親しみやすいため、通常の手続き型/命令型のコードを使用するようにしたかったのです。

もう1つの違いは、Rxが状態のないイベントのストリームを構成するために最適化されていることです。最初はこれとその機能の純粋さに熱心でしたが、しばらくすると、厄介なフープを飛び越えて、UIコマンドを効率的に管理するために状態をシミュレートする追加の方法を発明しなければならなくなったように感じました。そのため、Knockoutでは、すべてのオブザーバブルをステートフルとして扱うことができます。たとえば、常に最新の値を読み取ることができます(ちなみに、キャッシュされていますが、基になるデータが変更されるまで再計算されません)。

RxはKnockoutよりもイベントストリームを構成する高度な方法に進んでいますが、KnockoutはRxよりもUI開発に進んでおり、オブザーバブルをHTML DOM要素とテンプレートにバインドして、好きなように操作できます。 Rxはその機能に優れていますが、リッチなUIを構築したかったのとはまったく異なります。したがって、Knockoutの設計です。

63
Ben Challenor

これらは実際にはまったく異なるフレームワークですが、クロスオーバーが表示される理由はわかります。

RxJsは、イベントやWebリクエストなどの非同期ストリームに対する操作を構成する手段を提供し、ストリームの結合などの高度なシナリオを含みます(AとBの両方が発生した場合は開始しますが、AまたはBが発生した場合はキャンセルします)再び)

Knockoutは、機能をマップするモデルを介してユーザーインターフェイスの状態を管理できるようにするMVVMフレームワークです。これにより、ビューのロジックをビューから分離できます。

21
Richard Szalay