小對象優(yōu)化我們集中在字段優(yōu)化、業(yè)務(wù)優(yōu)化、緩存優(yōu)化三個緯度,不同的緯度有不同的優(yōu)化策略 。

文章插圖
圖 15. 小對象優(yōu)化思路
# 通用類優(yōu)化
在抖音的業(yè)務(wù)中,視頻是最核心且通用的 Model,抖音業(yè)務(wù)層的數(shù)據(jù)存儲分散在各個業(yè)務(wù)維護了各自視頻的 Model,Model
本身由于聚合了各個業(yè)務(wù)需要的屬性很多導致單個實例內(nèi)存占用就不低,隨著用戶使用過程實例增長內(nèi)存占用越來越大 。對 Model
本身我們可以從屬性優(yōu)化和拆分這兩種思路來優(yōu)化 。
* 字段優(yōu)化:針對一次性的屬性字段,在使用完之后及時清理掉緩存,比如在視頻 Model 內(nèi)部存在一個 Json 對象,在反序列完成之后 Json 對象就沒有使用價值了,可以及時清理 。
* 類拆分:針對通用 Model 冗雜過多的業(yè)務(wù)屬性,嘗試對 Model 本身進行治理,將各個業(yè)務(wù)線需要用到的屬性進行梳理,將 Model 拆分成多個業(yè)務(wù) Model 和一個通用 Model,采用組合的方式讓各個業(yè)務(wù)線最小化依賴自己的業(yè)務(wù) Model,減少大雜燴 Model 不必要的內(nèi)存浪費 。
# 業(yè)務(wù)優(yōu)化
* 按需加載:抖音這邊 IM 會全局保存會話,App 啟動時會一次性 Load 所有會話,當用戶的會話過多時相應(yīng)全局占用的內(nèi)存就會較大,為了解決該問題,會話列表分兩次加載,首次只加載一定數(shù)量到內(nèi)存,需要時再加載全部 。
* 內(nèi)存緩存限制或清理:首頁推薦列表的每一次 Loadmore 操作,都不會清理之前緩存起來的視頻對象,導致用戶長時間停留在推薦 Feed 時,緩存起來的視頻對象過多會導致內(nèi)存方面的壓力 。在通過實驗驗證不會對業(yè)務(wù)產(chǎn)生負面影響情況下對首頁的緩存進行了一定數(shù)量的限制來減小內(nèi)存壓力 。
# 緩存優(yōu)化
上面到的視頻 Model,抖音最早使用 Manager 來管理通用的視頻實例 。Manager 使用 HashMap
存儲了所有的視頻對象,最初的方案里面沒有對內(nèi)存大小進行限制且沒有清除邏輯,隨著使用時間的增加而不斷膨脹,最終出現(xiàn) OOM 異常 。為了解決視頻 Model
無限膨脹的問題設(shè)計了一緩存框架主要流程如下:

文章插圖
圖 16. 視頻緩存框架
使用 LRU 緩存機制來緩存視頻對象。在內(nèi)存中緩存最近使用的 100
個視頻對象,當視頻對象從內(nèi)存緩存中移除時,將其緩存至磁盤中 。在獲取視頻對象時,首先從內(nèi)存中獲取,若內(nèi)存中沒有緩存該對象,則從磁盤緩存中獲取 。在退出 App
時,清除 Manager 的磁盤緩存,避免磁盤空間占用不斷增長 。
# 圖片
關(guān)于圖片優(yōu)化,我們主要從圖片庫的管理和圖片本身優(yōu)化兩個方面思考 。同時對不合理的圖片使用也做了兜底和監(jiān)控 。
# 圖片庫
針對應(yīng)用內(nèi)圖片的使用狀況對圖片庫設(shè)置了合理的緩存,同時在應(yīng)用 or 系統(tǒng)內(nèi)存吃緊的情況下主動釋放圖片緩存 。
# 圖片自身優(yōu)化
我們知道 圖片內(nèi)存大小公式 = 圖片分辨率 * 每個像素點的大小。
圖片分辨率我們通過設(shè)置合理的采樣來減少不必要的像素浪費 。
//開啟采樣ImagePipelineConfig config = ImagePipelineConfig.newBuilder(context) .setDownsampleEnabled(true) .build();Fresco.initialize(context, config);//請求圖片時,傳入resize的大小,一般直接取View的寬高ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri) .setResizeOptions(new ResizeOptions(50, 50)) .build();mSimpleDraweeView.setController( Fresco.newDraweeControllerBuilder() .setOldController(mSimpleDraweeView.getController()) .setImageRequest(request) .build());
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 抖音怎么弄配音加原音,抖音視頻后期配音怎么弄
- 西瓜視頻可以看手機通訊錄嗎,西瓜視頻找通訊錄好友
- 皮皮趕海視頻,皮皮趕海西瓜視頻主頁
- 西瓜視 西瓜視頻是誰開的
- 怎么刪除抖音自己的作品,發(fā)表在抖音里的視頻怎么刪除
- 視頻剪切器免費手機版 手機視頻剪輯軟件哪個好用
- 短視頻編劇合作平臺 短視頻編劇職責
- 免root卸載華為 免root卸載華為視頻
- 短視頻聯(lián)盟真的還是假的 全球短視頻聯(lián)盟是不是假的
- 農(nóng)家朱少新視頻 二丫鄉(xiāng)村生活西瓜視頻
