亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

西瓜視頻播放位置其他是哪里,西瓜視頻的緩存文件在哪里( 五 )


小對象優(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)容,希望對您有所幫助: