閒魚是如何利用RxJava提升異步編程能力的
{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"RxJava是Java對於反應式編程的一個實現框架,是一個基於事件的、提供實現強大且優雅的異步調用程序的代碼庫。18年以來,由淘寶技術部發起的應用架構升級項目,希望通過反應式架構、全異步化的改造,提升系統整體性能和機器資源利用率,減少網絡延時,資源的重複使用,併爲業務快速創新提供敏捷的架構支撐。在閒魚的基礎鏈路諸如商品批量更新、訂單批量查詢等,都利用了RxJava的異步編程能力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不過,RxJava是入門容易精通難,一不小心遍地坑。今天來一起看下RxJava的使用方式、基本原理、注意事項。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"開始之前"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我們先看下,使用RxJava之前,我們曾經寫過的回調代碼存在的痛點。當我們的應用需要處理用戶事件、異步調用時,隨着流式事件的複雜性和處理邏輯的複雜性的增加,代碼的實現難度將爆炸式增長。比如我們有時需要處理多個事件流的組合、處理事件流的異常或超時、在事件流結束後做清理工作等,如果需要我們從零實現,勢必要小心翼翼地處理回調、監聽、併發等很多棘手問題。還有一個被稱作“回調地獄”的問題,描述的是代碼的不可讀性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Code 1.1"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/3e\/3e487f99993e9fbb9dff9fb40a9a0936.jpeg","alt":"圖片","title":"null","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以上js代碼有兩個明顯槽點:1.由於傳入的層層回調方法,代碼結尾出現一大堆的 }) ;2. 代碼書寫的順序與代碼執行的順序相反:後面出現回調函數會先於之前行的代碼先執行。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"而如果使用了RxJava,我們處理回調、異常等將得心應手。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"引入RxJava"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"假設現在要異步地獲得一個用戶列表,然後將結果進行處理,比如展示到ui或者寫到緩存,我們使用RxJava後代碼如下:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Code 2.1"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"text"},"content":[{"type":"text","text":"Observable
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.