APP查詢圖片優化

BetterDays發表於2018-10-15

APP本地圖片較多,每次查詢圖片都要消耗24ms左右,導致點選tabbar的時候都要等上七八百ms,有的頁面甚至要1s,用instruments中的Time Profiler工具查詢之後發現頁面viewdidload大部分的時間都花在了查詢圖片上,所以這次針對查詢圖片做了初步優化。

APP查詢圖片優化

優化前:

優化前tabbar的點選事件著實比較尷尬,點選的時候卡頓非常明顯。

APP查詢圖片優化

優化後(順帶把didfinishlaunching優化了一下):

優化後把每個tabbar對應的viewController的初始化速度控制在了100ms之內,點選之後沒有明顯的卡頓,基本達到預期。

APP查詢圖片優化

核心程式碼:

建立一個序列佇列,然後非同步開啟子執行緒進行耗時操作,最後回到主執行緒非同步更新UI。

+ (void)childThreadOperation:(childThreadOperation)chileThreadOperation mainThreadOperation:(mainThreadOperation)mainThreadOperation{
    dispatch_queue_t queue = dispatch_queue_create("optimizeImageQueue", DISPATCH_QUEUE_SERIAL);
    dispatch_async(queue, ^{
        if(chileThreadOperation){
            chileThreadOperation();
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            if(mainThreadOperation){
                mainThreadOperation();
            }
        });
    });
}
複製程式碼

附上github地址:TFQImageOptimization 使用方法可以參考viewController中的虛擬碼

Time Profiler使用教程請參考我在簡書的文章:iOS 使用Instruments的Time Profiler工具進行app載入時間分析

載入圖片請參考我在部落格園的文章:如何獲得images.xcassets 中圖片的路徑?

同步非同步問題請參考我在掘金的文章:iOS執行緒、同步非同步、序列並行佇列

Tips:

imageNamed方法在iOS9以後才是執行緒安全的,大家使用的時候要注意,iOS9以下可能會crash或者返回nil

APP查詢圖片優化

現在我正在優化我們的APP,如果大家有什麼好的優化方法的話,請務必要在評論裡附上鍊接,感激不盡。

相關文章