前些日子,一個(gè)手機(jī) QQ 安裝包就要快 900MB 的事兒在網(wǎng)上吵得沸沸揚(yáng)揚(yáng)。
△ 最新安裝包又大了,已經(jīng) 924MB
雖然最后大家發(fā)現(xiàn)它主要為了視頻通話特效多了一個(gè)虛幻引擎,但網(wǎng)友還是感嘆:
現(xiàn)在的 App 真的是越來越大了。
而就在最近,國外一位程序員也遇到了同樣的困惑。他乘的一班飛機(jī)由于沒有機(jī)上小電視,只能下載一個(gè)叫做“美聯(lián)航”的 App 來看視頻打發(fā)時(shí)間。
小哥一邊感嘆現(xiàn)在航空公司越來越雞賊:把成本都加到顧客頭上,一邊打開了應(yīng)用商店,結(jié)果就很詫異:不就用來看個(gè)電影啥的嗎,一個(gè) Netflix 都只有 101.5MB,這 App 怎么是它的四倍?
作為一名 iOS / Android 開發(fā)工程師,小哥決定不“坐以待斃”,看看它是否真的需要這么大的空間。
原來可以省掉 187MB
說干就干,還在飛機(jī)上的小哥立刻用 ipatool 下載了這個(gè) App 的二進(jìn)制文件。
ipatool 是 GitHub 上標(biāo)星 1.4k 的開源項(xiàng)目,是一個(gè)命令行工具,可以從 iOS 應(yīng)用商店搜索和下載應(yīng)用程序的 ipa 文件包,用這個(gè)包可以進(jìn)行開發(fā)內(nèi)容的一些檢查等功能。
下好以后需要把 ipa 擴(kuò)展名改為 zip,解壓之后可以看到下面這樣的目錄:
可以發(fā)現(xiàn) Frameworks 就占了 414.8MB,小哥解釋:應(yīng)用程序的主要內(nèi)存來源就是 Frameworks,現(xiàn)在的最佳實(shí)踐都是把代碼 push 到這里面,還是挺正常的。
接下來進(jìn)入該目錄:
以 UAL 開頭的框架是核心架構(gòu)、NodeMobile 框架跟 NodeJS 功能有關(guān)、LocusLabsSDK 和 Mapbox 是供應(yīng)地圖的,還有一些是負(fù)責(zé)身份驗(yàn)證、客戶反饋的……
而視頻播放相關(guān)的框架相反其實(shí)占內(nèi)存并不多:
接著進(jìn)入占空間最大的 UALAppCore.framework。
經(jīng)過層層探索,小哥終于在這里鎖定了最大占存的 UALAppCore。
按照他的工作經(jīng)驗(yàn),77MB 這個(gè)數(shù)字還是有點(diǎn)反常的,他打算用 nm 命令深入看看這個(gè)框架的符號(hào)表(symbol)文件(nm 用于顯示二進(jìn)制目標(biāo)文件的符號(hào)表,格式如下)。
很快他就想起來,Swift 的符號(hào)需要?jiǎng)冸x(strip,iOS 框架中的術(shù)語),Objective-C 則不需要。那就查 Swift 的,結(jié)果還真就發(fā)現(xiàn):沒有一個(gè) Swift 框架的符號(hào)被剝離過。而這些都沒有用,白白耗內(nèi)存:
那接下來就簡(jiǎn)單了,寫一個(gè) bash 腳本運(yùn)行一下該框架就可以 OK:
最后,可以看到原始框架從 350MB 減到了 163M!
小哥表示,這一頓操作只花了不到 5 分鐘,沒想到可削減空間這么大,整整省掉了 187MB。等于現(xiàn)在的安裝包只有原來的不到 60% 了。他猜測(cè)該安裝包仍有削減空間,不過這個(gè)結(jié)果他已經(jīng)很滿意了。你,學(xué)廢了嗎?
“開發(fā)商才不關(guān)心呢”
就在小哥發(fā)出這個(gè)博客之后,有網(wǎng)友評(píng)論道,還有很多安裝包其實(shí)都可以再縮減 15% 到 30% 甚至更高的空間,就比如 Gmail、Outlook 這些很常見的應(yīng)用。
但似乎現(xiàn)在很多開發(fā)商不是很關(guān)心這個(gè)問題,他們只想趕緊不停更新應(yīng)用:給不給用戶省掉這幾百 M 的流量都一樣賺錢,為啥還要費(fèi)功夫呢?
有一位嵌入式工程師就表示:當(dāng)我跟同事提起要注意這方面的優(yōu)化時(shí),他們總是給我一個(gè)茫然的眼神。
有網(wǎng)友認(rèn)為:除非各應(yīng)用商店開始管這事兒,開發(fā)商是不會(huì)做出改變的。就單說手機(jī)廠商就很樂意看到這一場(chǎng)面,內(nèi)存不夠就可以去他們那買新手機(jī)了。
他還發(fā)現(xiàn)谷歌 Play Store 好像就不顯示應(yīng)用程序大小。而一些銀行 App 在這個(gè)問題上尤其嚴(yán)重,因?yàn)樗麄冎滥悴粫?huì)輕易換銀行。你怎么看?
原博鏈接:
https://telkins.dev/posts/how-i-shaved-187mb-off-uniteds-airlines-439mb-ios-app/
評(píng)論來自:
https://news.ycombinator.com/item?id=30442529&p=2
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。