最近,微信安裝包從v1.0的0.5M暴漲到V8.0的 260M引起大家熱議,為什麼我們開發的程式越來越大?本文做一個簡單的討論。(本文主要根據B站科技老男孩《https://www.cnblogs.com/mqingqing123/p/逆向工程微信安裝包,11年膨脹575倍到底更新了啥?》編寫)。
最近,很多人都感覺到,現在的程式安裝包沒有1-2百兆大小都不好意思叫做安裝包。這在以前是不可想象的,早期(其實也沒有多早,大約10年前吧),正常一個程式的安裝包也就30M左右,那時
你可以照樣使用微信,使用百度,使用支付寶。可是現在,1-2百M的安裝包比比皆是,而這還只是安裝包。
大家都知道android的apk是zip格式的,解壓後,就可以看到本體了,微信安裝包解壓後大小已經達到了617M,包含了12639個檔案。
作為對比,微信1.0版只有199個檔案。
那麼到底是那些東西佔用了大量空間呢?
微信版資原始檔包括的各種圖片檔案,視訊、音訊檔,比如微信鈴聲、各種圖示等。
另外,原作者也提到新版微信應該是公司內部不同開發組做的,導致資源管理非常混亂,各顧各的,最後縫在一塊,
所以,會有重複的情況,有些資源命名也直接使用的是拼音。
lib資料夾存放了各種庫檔案,這是安裝包的大頭。
在程式開發裡,很多時候都使用了第三方庫,而不是從零編起,
以微信為例,我要支援線上解壓,那包含一個7-zip庫。
我要支援視訊播放(mp4,ogg,avi等),那就把ffmpeg庫打包進去。
我要支援圖片線上編輯,那把pngedit庫包含進去
這些第三方庫都是打包好的,很難再壓縮。微信一共使用了157個庫檔案。
程式本體也就是程式自己實現的主要功能,新版大小為161M,而 V1.0版本只有0.25M,換句話說,但就聊天而言
微信只要0.25M就能實現核心聊天功能,去掉零頭,在161M的程式本體裡,160M都可以去掉不要(當然這是有點誇張的說法)。
進一步反編譯可以看到在v1.0裡使用了1845個string就能實現新版 1498000個string實現的聊天功能。
因此,你可以看想象到微信裡面塞了多少內容。
所以,微信中0.1%的功能是聊天,剩下的99.9%都是塞給你的,什麼打車、遊戲、外賣、視訊等等,
軟體包越來越大的企業不止微信,比如X瀏覽器使用1M就實現了瀏覽器的核心功能(充分利用作業系統自帶的功能),而UC瀏覽器就達到了83M。
每個大企業都沒有安全感,都把遊戲、視訊、外賣等往裡塞。
剛剛,支付寶又提示有新的更新包,要我升級了。
對比一下美國的 Facebook大小是66.52M,Twitter 安裝包109M,谷歌地圖99M(百度地圖130M),都儘可能控制在100M以內。
如今,雖然硬體急速發展,手機2核或4核,記憶體128或者256都已經算是最低設定了,
但是如果每個軟體越來越大,再大的硬體設定也不夠軟體使用。