RxJとKnockoutの違いを知っている人はいますか? 表面的には、彼らはイベント駆動型 UI を構築するために、同じ問題を解決しようとしているように見えます。しかし、両方を経験したことがある人は、どのように違いますか/どのように似ていますか? 私が選択するのを助けるために、それらについて何か説明できますか?
2 に答える
Steve (Knockout の作成者)は、ブログで違いを説明しています。
私は Rx for JavaScript に非常に精通しており、最近大きなプロジェクトで頻繁に使用しています。実際、Knockout の設計の側面は、私の Rx の経験を念頭に置いて作成されています。
オブザーバー パターンの Knockout の実装と Rx の実装の主な違いは、Knockout が通常の手続き型コードからオブザーバブル間の関連付けと依存関係を自動的に推測することです。特別な関数 API を使用して事前にそれらを指定する必要はありません。Knockout で通常の手続き型/命令型スタイルのコードを使用することを望んでいました。これは、ほとんどの開発者にとってより親しみやすく、親しみやすいものだからです。
もう 1 つの違いは、Rx が状態のないイベントのストリームを作成するために最適化されていることです。最初は、これとその純粋な機能に熱中していましたが、しばらくすると、厄介なフープを飛び越えているように感じ、UI コマンドを効率的に管理するために状態をシミュレートするための追加の方法を発明する必要がありました。そのため、Knockout では、すべてのオブザーバブルをステートフルとして扱うことができます。たとえば、常に最新の値を読み取ることができます (ちなみに、これはキャッシュされています。基になるデータが変更されるまで再計算されません)。
Rx はイベント ストリームを構成する高度な方法に Knockout よりも進んでいますが、Knockout は Rx よりもさらに進んで UI 開発に進んでおり、そのオブザーバブルを HTML DOM 要素とテンプレートにバインドし、それらを好きなように操作できます。Rx は優れた機能を備えていますが、リッチな UI を構築したいと思っていたのとはまったく違うことがわかりました。それが Knockout の設計です。
これらは実際にはまったく異なるフレームワークですが、クロスオーバーが見られる理由はわかります。
RxJsは、イベントや Web 要求などの非同期ストリームに対する操作を構成する手段を提供し、ストリームの結合などの高度なシナリオを含みます (A と B の両方が発生した場合はこれを開始しますが、A または B が再び発生した場合はキャンセルします)。
Knockoutは、機能をマップするモデルを介してユーザー インターフェイスの状態を管理できるようにする MVVM フレームワークです。これにより、ビューのロジックをビューから分離できます。