周二在實驗室給大家做了一個 RxJS 的 Session,總算體會到 準備充足的情況下,是不會太緊張的。相比周六的 lighting talk 是好了很多,然而,同學們提了很多我沒有想到的問題,對于這方面的知識儲備還是不夠,遂先來看看 響應式編程。
什么是響應式編程
函數響應式編程(FRP Functional Reactive Programming),為解決現代編程問題提供了全新的視角.一旦理解它,可以極大地簡化你的項目,特別是處理嵌套回調的異步事件,復雜的列表過濾和變換,或者時間相關問題。
響應式編程是一種新的編程風格,其特點是異步或并發、事件驅動、推送PUSH機制以及觀察者模式的衍生。reactive 應用(響應式應用)允許開發人員構建事件驅動(event-driven),可擴展性,彈性的反應系統:提供高度敏感的實時的用戶體驗感覺,可伸縮性和彈性的應用程序棧的支持,隨時可以部署在多核和云計算架構。
微軟術語:Rx = Observables + LINQ + Schedulers(并不能理解微軟這個術語的真正含義)
微軟官方解釋:Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators.
首先,響應式編程是一種編程范式。
而我們現在大多使用的是命令式編程,那么命令式編程與函數響應式編程有什么區別呢?
- 命令式編程:以命令為主,給機器提供一條又一條的命令序列讓其原封不動的執行.
- 函數響應式編程(FRP):使用異步數據流進行編程。FRP的思想比較難理解,需要我們將以往的命令式編程思想轉變為響應式編程思想。我們要做的就是面向數據流編程。Everything is a stream
響應式編程就是與異步數據流交互的編程范式
一方面,響應式編程就是與異步數據流交互的編程范式,這已不是什么新事物了。事件總線或一些典型的點擊事件本質上就是一個異步事件流,這樣你就可以觀察它的變化并使其做出一些反應。
響應式是這樣的一個思路:除了點擊和懸停(hover)的事件外,你可以給任何事物創建數據流。數據流無處不在,任何東西都可以成為一個數據流,例如變量、用戶輸入、屬性、緩存、數據結構等等。
舉個栗子,你可以把你的微博訂閱功能想象成跟點擊事件一樣的數據流,你可以監聽這樣的數據流,并做出相應的反應。
最重要的是:你可以使用 es6 中特別驚艷、高效的函數去結合、創建和過濾任何一組數據流。 這就是"函數式編程"的魔力所在。一個數據流可以作為另一個數據流的輸入,甚至多個數據流也可以作為另一個數據流的輸入。你可以合并兩個數據流,也可以過濾一個數據流得到另一個只包含你感興趣的事件的數據流,還可以映射一個數據流的值到一個新的數據流里。
我為什么要采用響應式編程?
僅此一句:
響應式編程可以加深你代碼抽象的程度,讓你可以更專注于定義與事件相互依賴的業務邏輯,而不是把大量精力放在實現細節上,同時,使用響應式編程還能讓你的代碼變得更加簡潔。
尤其是對于現在流行的 webapps 和 mobile apps,它們的 UI 事件與數據頻繁地產生交互,在開發這些應用時使用響應式編程的優點將更加明顯。N 年前,web 頁面的交互是通過提交一個很長的表單數據到后端,然后再做一些簡單的前端渲染操作。而現在的 Apps 則演變的更具有實時性:僅僅修改一個單獨的表單域就能自動的觸發保存到后端的代碼,就像某個用戶對一些內容點了贊,就能夠實時反映到其他已連接的用戶一樣,等等。
Read more
文字略多,看著略顯枯燥甚至乏味......
關于這方面的 demo 尚在學習 ing,先 上 一個簡單的 Helloworld