在应用开发中,网易云音乐如何兼顾质量和效益
在應用開發中,質量和效益是非常關鍵的因素。網易云音樂作為用戶人數突破4億,成就移動音樂傳奇的應用,是如何在開發中兼顧質量和效益的?網易云音樂Android負責人梁建將為您解讀。
框架賦能
典型的開發框架從上往下分為三層,分別是業務層、服務層、能力層,三者之間是垂直依賴的關系,且業務層之間的水平模塊不互相依賴,這樣的分層有助于不同APP和同一APP間進行代碼互用。
能力層跟業務邏輯完全沒有關系,可以直接遷移,服務層可以按需定制,最上面的業務層則是開發者最熟悉的業務模塊。
插件化
插件屬于業務層的組件,行業中的設計方案很多,網易云音樂在插件設計時主要考慮三點因素:
設計簡單
開箱即用、用完即止,最好是原生方案。
維護成本
當一個APP有非常多插件的時候,維護成本是非常重要的問題。有些插件可能依賴宿主的代碼或資源,會對應用造成很大的不確定性。
性能
要求插件具有很好的運行效率。
網易云音樂插件設計實現:
首先,插件主體載體是Fragment,非常輕量,可以嵌在任何一個Activity里面。只要預埋一個Activity,就可以啟動任何一個插件模塊。網易云音樂把UI組件和代碼冗余打包到插件包中,這樣雖然增加插件體積,但會減少維護成本。
對于圖片、網絡這些能力層的功能,網易云音樂則使用服務接口來提供。這樣一方面是為了減少依賴,另一方面可以讓開發者在插件開發時保持和傳統APP開發相同的習慣。
服務接口主要使用兩種方式,一種是路由,一種是服務注冊。為了盡可能避免進行對象的序列化和反序列化,網易云音樂把Meta層下沉到底部,開發者可以直接面向接口編程,同時建議插件盡量不依賴代碼,也盡量不要固定宿主的資源ID或者修改插件的ID前綴,以免造成冗雜。
得益于非常輕量的原生插件實現,網易云音樂運行效率非常高。
組件化
上層業務組件水平模塊之間不相互依賴,也為組件化提供了很好的支持。如上圖,在開放一個動態功能時,只需將動態業務組件和核心業務組件打包在一起,便形成了一個動態業務殼;開發評論組件時,同樣是把評論組件和核心業務組件打包在一起。這樣的設計可以支持熱拔插,提高業務線的并行開發效率,同時可以極大地減少編譯速度。
全鏈路開發流程
全鏈路開發流程作為一個平臺,串起了開發過程中的很多節點。那么,這套流程是如何保證開發效率的呢?
卡點
開發流程被分配到每個節點,每個節點都有各自的任務和責任。通過節點分配,將節點痛點逐一擊破,極大地提高開發效率。
自動化
自動化是整個平臺的核心,所有的自動化測試都是為了質量而生。自動化有一個非常重要的應用場景——自動打點,這是開發者的痛點,打點占用了開發太多時間。云音樂通過編譯期進行代碼注入自動生成打點,極大地提高了效率,減少了人工出錯的可能性。
閉環
無論是版本數據,還是上線以后對數據指標的監控,云音樂通過數據發展趨勢反哺于開發質量形成閉環。
以網絡治理為例:客戶端的網絡問題非常復雜,云音樂通過觀察線上網絡指標來輔助策略的調整。通過ABTest實驗,以觀察網絡連通性是否提升,再通過觀察數據,調整網絡優化策略,以此往復,形成閉環。
思考和建議
1.警惕拿來主義
不同方案適用于不同公司的問題,直接拿過來使用可能會有一些不良反應,所以一定要結合各APP的實際情況來仔細分析。
2.簡單設計
簡單設計意味著很多,更簡單的設計意味著更高效的運行、更少的維護成本,簡約往往并不簡單。
3.量化指標
沒有數據就沒有話語權,沒有數據就會失去方向,只有有了量化指標,才能呈現一個閉環。
4.勤思考 多溝通
需要開發者勤思考,多與他人溝通交流。例如在 “分享圖標”的設計上,不同的應用會做一些差異化的設計。但如果設計過度,導致與其他大部分應用有較大差異,使用戶無法識別出“分享圖標”時,會造成分享率降低的后果。
*本文根據梁建講師在安卓綠色聯盟開發者大會現場的議題分享整理而成。
想了解更多,請點擊觀看講師精彩現場視頻>>>>
https://v.qq.com/x/page/o0804...
安卓綠色聯盟會根據每期技術沙龍議題輸出精彩技術干貨文章,分享講師PPT,為未能現場參加技術沙龍的您提供另一個干貨學習機會。
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的在应用开发中,网易云音乐如何兼顾质量和效益的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 走过2011---年终总结
- 下一篇: Tomcat - 常用配置