优化信息流很麻烦?三招教你轻松搞定
隨著移動互聯網的快速發展,大多數人已經習慣用手機獲取各類信息。但信息量的不斷增大,各種低質重復信息正嚴重影響著用戶體驗。所謂信息流性能優化,就是利用“大數據+人工”的方式在信息的數量和質量上控制展現在用戶眼前的信息。
本文將由新浪微博客戶端Feed組技術專家張善祿對微博的信息流優化解決方案進行解讀。主要包括三個部分:流服務、性能優化、性能監控。
流服務
微博信息流承載了視頻、直播、文章等許多業務,信息流和這些業務間的耦合比較嚴重。這種關系不但導致信息流維護成本增加,也在一定程度上影響業務方的開發。
為了解決上述問題,微博開發了流服務框架,主要有兩個目標:一是解決耦合問題實現業務插件化,二是支持微博內部其他流式頁面的快速開發。
ViewModel是這個模型的關鍵對象,一方面負責管理View的狀態,另一方面負責將View中的事件包裝成一個Action。Action用來描述一個業務事件,它包括類型和數據,一個Action最終會交給ActionExecutor來處理,ActionExecutor負責處理具體的業務邏輯。
由于View和ViewModel不處理具體的業務邏輯,因此復用性很好。在不同的頁面,往往具體的業務邏輯也不同,只需將ActionExecutor替換掉即可。
流服務不但解決了耦合的問題,也為性能優化打下了良好的基礎。
性能優化
一條微博可以自上而下地劃分為頭部、文字、視頻、標簽、底部按紐等16塊區域,其中較特殊的區域有轉發微博區域和Card區域。轉發微博區域展示的是用戶轉發的微博,同樣可以自上而下劃分為16塊區域;Card區可以展示視頻、直播、大圖等,不同的微博展示的Card類型不同,目前Card區域的類型大概有30多種。
由此可見微博View十分復雜,這導致view層級較深并且BindView開銷較大。我們解決這些問題的思路是化繁為簡,按照上述劃分的區域,將微博拆分成一一對應的view,同時我們會為每個拆分好的View創建ViewModel。
拆分完成以后,為了解決微博整體的點擊、背景等問題,我們定義了VirtualView的概念,將點擊事件、背景等信息放到VirtualView中進行處理。
為了優化BindView的開銷,微博在會子線程中對耗時的業務邏輯進行預處理。
此外,針對某些創建開銷較大的view,微博開發了預加載view的機制,在創建完ViewModel后,根據配置來決定ViewModel對應的view是否需要預加載,這樣在創建view時可直接從ViewCache中獲取。
性能監控
性能監控系統可以發現并定位性能問題,評估優化效果。微博性能監控主要包括CPU、內存、FPS、卡頓。
性能監控會貫穿微博開發過程中的每一個環節。開發階段可以利用性能監控系統實時查看性能狀態;提代碼階段會有自動化性能測試防止有問題的代碼進版;內測階段會有性能報告來評估新版本的性能問題;上線后,可以幫助解決線上用戶的性能問題。
對于微博信息流優化實踐,你覺得有哪些值得借鑒和可以改進的地方呢?歡迎留言說出您的看法~
本文首發于安卓綠色聯盟微信公眾號,轉載請注明出處。
總結
以上是生活随笔為你收集整理的优化信息流很麻烦?三招教你轻松搞定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【作业】第六章 面向对象基础
- 下一篇: 深圳市灯谜学会的近三百条“深圳原创灯谜”