iOS App優化1---減少包體積

ptlCoder發表於2019-04-02
  • 如今的App相比幾年前包的大小明顯發生了變化,需求的不斷變更迭代,甚至有些產品為了‘迎合’市場,一個基本頁面一年到頭改得數不勝數,讓人的感覺像是,我是產品我說了說,你必須改,不讓我怎麼有存在感。好了,如果都這樣發展下去,我們的App就算是頂級大神來造,總有一天也會受到App Store的限制,那個時候我們的產品就乖乖的靜下來反思。App Store 規定了安裝包大小超過 150M 的App 不能使用 OTA下載,你只能坐在有WiFi的地方靜靜的下了,這樣一來,相比會流失一部分的使用者。說一百道一千,萬一我們的App達到這樣的高潮了該腫麼辦勒?只有一個辦法,那就‘減肥’,減少包的體積。
  • 減少包的體積,那可不是一件容易的事,特別是一些非常‘古老又年代已久’的專案,這種App是最棘手的。我們先一點一點來說,從以下幾個方面。
1、最簡單粗暴的就是減少一些垃圾檔案,圖片資源等。

專案迭代久了,其中多多少少會有一些沒用的圖片資源,當然了圖片那麼多不可能一張一張去排查,這裡我們藉助一個三方工具LSUnusedResources,開啟這個工具,如圖

0C2540F9-EC0A-4AFC-804C-DE44E7A27815.png
你可以看到上面那樣,點選Browse去選擇你的專案,然後搜尋一下就OK了,但是你不要絕對相信一個不是自己寫的工具,如果你載入圖片不是通過imageWithName:這個的方式,他是無法查詢的,如果你的圖片名採用拼接的方式,那麼他也是無法確認的,所以你要刪除一張圖片的時候,最好是確認一下。

2、圖片壓縮

美工妹妹給圖的時候,叫她儘量的給png, 儘可能做出來的圖不要太大,我見過很多UI,一個控制元件上面的小圖示做出來幾百KB, 我在想這是有多麼不專業啊,人家幾十KB,你咋給我的這麼大勒。當然了有時候UI沒有考慮那麼多,這個時候就考驗我們專業的時候了,自己壓。你可以採取有損和無損看你們的要求,你也可以把圖片轉成WebP格式的,這個是谷歌推出來的,可以自行谷歌瞭解一下,它壓縮率很高,比直接有損和無損強幾倍。有一個騰訊開發的iSparta,可以把圖片轉成WebP,怎麼載入WebP,SD怎麼支援WebP,大家可以自行查閱。

3、刪除註釋程式碼和無用的類

我們寫程式碼很多的邏輯是最初寫好後,由於某種原因就註釋在那,這一註釋不要緊,最後連誰寫的都忘了,留著還有啥意義,別以為後面的迭代會需要,你永遠都猜不透一個產品接下來給你拋什麼樣的需求,因為連他們自己也不知道接下來要幹嘛。所以你就大大方方的刪除那些不要的註釋程式碼,大不了再擼一遍咯。 那不要的類咋辦,如果專案很大很老又是接手了多手專案,那怎麼去排查類檔案空置著。我們也可以藉助其他工具,你可以用 AppCode這個IDE。工具條Code-->Inspect Code...。是的,不要以為只有Xcode才能寫OC, 這個工具可以把一些沒有使用到了類、屬性啥的都可以檢測出來,還是那句話,不要一味地相信他人,要二次確認是否可刪。

  • 這個工具不能檢測執行時都幹了嘛,只能做靜態分析,有可能某個哥們在動態執行時替換了一個你以為沒有用的類,你一刪就炸了。
  • performSelector 方式呼叫的方法也檢查不出來
  • 子類呼叫了父類的方法,那這個父類就被檢測出來無用
  • 通過NSClassFromString等執行時方式也是無法檢測準確性 ······ 當然除了這個工具還有其他很多方式,比如可以通過LinkMap 來查詢 Mach-O 檔案裡面的無用程式碼,這部分大家可以去了解。 所以任何人和任何工具都不要絕對的相信,畢竟科學是嚴謹的。
4、減少三方庫的使用

用三方庫的時候儘量不要全部匯入進來,像AFN,SD他們都由幾部分組成的,如果你只是請求個網路,下載個圖,可以把庫裡面的分類去掉,如果是Cocoapods管理那更簡單,直接pod你要的那部分就行。這些功能強大的三方庫擴充性是很強的,支援的功能也多,但是有大部分是我們專案不用的,所以該刪就刪。

5、較少可執行檔案不要的架構

如果是你自己做的靜態庫,能不支援32位就不要支援了,現在的裝置都是64位,當然了這個根據自己專案決定吧,我們公司的專案已經放棄了5以下的適配了,更別說32位了。

相關文章