RxJS: Reactive Extensions For JavaScript 試用

RxJS is a library for composing asynchronous and event-based programs by using observable sequences. RxJS 為設計用來處理訊息的非同步組合操作。

試用心得與結論

Reactive X (Reactive Extensions) 設計用來處理訊息之非同步處理。其中 RxJS 為JavaScript的版本,各主流程式語言也各有自己的Rx版本(Rx Languagesarrow-up-right)。 Rx 讓複雜的資料(訊息)流演算過程因指令統一而變得易讀一些;也就是資料流複雜度不高的話會有反效果。資料演算複雜度不會因導入Rx而下降。不過,因為演算過程使用相同的指令集所以他人讀碼時不用再猜這指令的功能為何,故而使得複雜的資料演算變得比較易讀一些,不過依然燒腦。

Reactive Extensions 以 Observer pattenarrow-up-right 為設計核心,以 stream 運轉資料(訊息)流,並導入大量的 Higher Order Function 指令,使得:

  1. 演算步驟更明確,因為(不因人而異)使用相同的指令將步驟分段計算。

  2. 資料分流與合併更明確,因為(不因人而異)使用相同的指令將資料(或訊息)分流與合併。

  3. 資料(訊息)流可以被多方同時訂閱、也可以分支、合併多方資料(訊息)流。

  4. 連續訊息處理,用於UI操作之控制訊息的狀態處理變得很方便,最典型的滑鼠拖拉應用,滑鼠與鍵盤與其他UI介面操作之訊息多方整併等等。

  5. 若沒有訂閱(subscribe)則

經試用,可應用於: 一、大批量數據的演算。 二、UI訊息可以被多方訂閱(subscribe)並整併。 三、連續訊息流(stream)處理。

參考

指令入門

用一行碼來解釋的話,

太抽象了,更正式一些的說明。

Rx 的三個主要原素:Subjectarrow-up-right, Subscribearrow-up-right, Observerarrow-up-right 。其中 Subject is Objservablearrow-up-right。主題是可以被觀察/訂閱的。

重新用一行碼來解釋:

在實作上Observable與Subject的異同

  • 相同

    • Subject 與 Observable 都可以被訂閱

  • 相異

    • Subject 為訊息輸入接口,可以加入新訊息。

    • Observable 只能被觀察,無法加入訊息。

    • Observable 可串接 Observable 讓訊息分流或合併。

    • Subject 不可串接 Subject,但可轉化成Observable。

即:stream_input → Subject → Observable → Observable → Observable → Subscribe → stream_output

入門用法

處理大量數據

訊息訂閱與合併

繪成資料流圖

常用指令

只列清單指令說明請找官網 RxJS API List 說明arrow-up-right或google大神。有好幾個指令都很玄妙。 重點不在各個指令如何使用,而是如何有意義的組合RxJS指令。

rxjs

Subject, Observable, from, of, fromEvent, timer, interval, range,

rxjs/operators

tap, filter, map, reduce, scan, merge, startWith, mapTo, flapMap, withLastestFrom, takeUntil, switchMap,

基本應用與關鍵原始碼留存

應用一:大量數據統計計算

應用二:讓訊息可訂閱

應用三:連續訊息運算:拖拉

應用四:連續訊息運算:訊息合併(merge events)

Last updated