reactive programming[intro]
前言
reactive programming算是繼functional programming之後比較潮的編程理念了。
reactive programming一般具備以下幾個要素:
event-driven
Elastic
resillient
responsive
event-driven
reactive programming 的第一個要義是事件驅動 react to event。
事件驅動往往和async是掛鉤的,這種none-block的程序模型對於代碼並發效率提升有顯著效果。
reactive programming把數據模型的mutation看成是事件。
這種理念是可以說是event sourcing思想的加強版。
舉個rxjs的例子。
//採用rx的fromEvent操作符來描述數據源驅動 Observable.fromEvent(document,"click") .subscribe({next:(data)=>{ console.log(`document clicked`) }})
Elastic
靈活的數據處理模型。
靈活的數據處理模型。
在reactive programming的體系里,動態調節程序負載是一個基本要求。
以前端開發為例,我們常用throttle和debounce的方式來調節用戶在數據流,以便動態調節程序負載。在reactive programming中,這些數據處理方式則是一種常態。
舉個rxjs的例子。
//間隔1秒觸發的數據,變為了2秒才能執行通知。實現數據節流 Observable.interval(1000).throttleTime(2000) .subscribe({next:console.log})
resillient
容錯處理。
在前端領域,我們有Promise的catch,也有try/catch來處理。
對於一個事件驅動的framework來說,這種hard code的方式絕對是不夠的。
reactive programming在錯誤處理的基礎上,還要求程序有恢複數據流,保持健壯性和事件驅動恢復的能力。
舉個rxjs的例子
get(url).retry(3)// Displays the data from the URL or cached data .subscribe({next:console.log})
responsive
響應式 react to users
響應式 react to users
事件處理是reactive programming的第一要義,處理函數或者操作符要能夠組合、拆分等等來滿足框架要求。
結語
本文的話,對reactive-programming的介紹比較簡略。 對於我們大部分JSER來說,了解這種編程理念的最好途徑莫過於學習rxjs了。
最後,廣告時間。
阿里釘釘團隊招資深前端開發工程師,如果您對react +redux技術棧有比較好的實踐,請直接投遞如下郵箱。
xiaogang.hxg@alibaba-inc.com。
推薦閱讀:
※【譯】唯快不破:Web 應用的 13 個優化步驟
※前端利器之Bootstrap
※減少前端代碼耦合
※基於正態分布的前端性能數據分析(一)
※U4 2.0 新特性 —— Web Push