有些硬盤比較小的用戶或者是蘋果手機容量比較小的的用戶可能經常抱怨手機APP或者安裝的應用程序太大導致設備空間不夠用。特別是微軟Outlook為何要1G安裝包,而foxmai只要60M,為何同樣的競品APP有的點160M手機空間,有的只占5M? 而且當用戶空間不夠用的時候,如果你的app在占用空間排行榜上比較靠前的位置,那麼你的手機APP就會變成用戶要刪除的首選目標。
下面為大家簡單解釋一下為什麼有些手機APP或者應用程序總是那麼占用空間:
1. 歷史原因
為了兼容老版本或者一些舊有的用戶習慣,可能會有一些舊的特性包含在裡面,但是有的時候可能項目開發周期短,程序員哥哥是不會去動舊有的東西的,因為一旦牽涉到修改代碼,成本是很高的。隨便去掉一個功能點,需要考慮整個業務流程邏輯是否通順完整,改完以後還需要QA再進行回歸測試,這個過程就好像是從一整棟建好的大廈裡面抽掉一些磚塊,一不小心就有瞬間崩塌的危險。
2. 為了適應不同的用戶群體
比如像office光安裝包就1G多,安裝完成之後發現各種組件都已經給你裝過了,包括什麼ppt啊,visio啊各種亂七八糟的組件,excel裡面甚至還包含了vbscript這類開發者用到的組件;正常人類只希望用一個文檔或者excel的功能,office就會給你安裝了這麼一大堆東西。
3. 追求炫酷、高大上
有些app為了追求狂拽酷炫屌炸天的界面效果會使用一些精度比較高的資源(圖片、音頻、視頻),讓你看起來好像覺得很牛X的樣子,但是這些資源圖片占用了整個app容量的大頭。其實程序的二進制文件在編譯出來之後,把符號文件去掉以後執行文件本身就是非常小的,多則幾M,少則幾百K
4. 第三方庫
有些開發者為了圖省事,會直接使用一些開源框架,比如做游戲需要用cocos2d, unity3d等,應用程序可能會用到reactjs等,這樣子的好處是直接一套代碼跨平台,節省了開發時間,提升了開發效率,但是這些第三方庫本身是非常大的,因為第三方庫它不知道你要用哪些功能,干脆把所有的東西一股腦都給你。
5. 用戶數據
當用戶使用這些手機APP(應用程序)的時候會產生很多使用痕跡的,有些手機APP(應用程序)就索性直接用完之後扔在某個地方不管了,比如說產生一些日志文件或者一些臨時性的配置文件或者是一些數據記錄,就跟隨地扔垃圾的人一樣討厭,毫無節操可言。
看完上述種種,作為一個PM/RD肯定會有各種理由:我項目周期緊張啊、我的程序員哥哥不甩我啊、占用空間大小的事情只要不影響功能就行了啊、、、等,但是。。。這些都不能成為合理非法大量占用用戶使用空間的理由,如何讓自己的APP更加輕快,更加好用,這才是我們的終極目標。產品功能再牛X,細節不到位都是白搭;下面給出我自己針對上述問題的一些建議:
1. 解耦你的程序:現在大家都是用的面向對象語言,如果你的程序的類不能拆分成一個最簡單的功能,或者類依賴過多的類,肯定是很有問題的,需要程序員哥哥在寫代碼之前就要考慮清楚該如何做擴展,如何寫基礎模塊,如何寫業務模塊,哪些功能做成一個單獨的模塊,模塊裡面每個類負責最小化什麼樣的解耦功能;最好把工具類拆分出來,工具類有可能又分為業務型工具類和通用型工具類,說不定可以用到以後的項目中。
類似Chrome的插件模型永遠是客戶端程序最經典的架構。推薦沒事多看看《設計模式》,盡管你可能覺得過時了,不管時代怎麼變化,有些基礎的思想永遠不會變。
2. 動態的加載所需要的庫:如果做到了上一點,第二點就很好解決了,因為所有的模塊都是熱插拔模式的,可以根據用戶的需要把一些不需要的功能模塊刪掉,保持占用空間最小化。
3. 盡量多用繪制庫:現在的繪制庫都是很牛X的了,各種算法都給你寫好了,而且優化的非常好,只要運用得好,就不要去用一些圖片去解決問題,經常用圖片解決問題的程序員是很懶的,懶得去了解繪制庫的用法,只要稍微多了解一下你的繪制庫,基本上秒殺各種特效了。
4. 削減第三方庫: 很多第三方庫都包含了很多用不到的功能,把這些功能都去掉吧,這些東西哪天要用到再加上也是可以的,如果你不會削減證明你根本不了解你的生產環境,這樣子是很可怕的;趕緊動起來,去了解你的底層。
5. 盡量把一些重要的用戶數據自動上傳到雲端:比如一些最近的聊天記錄,聊天記錄中一些圖片文件等最好也要存成ID號上傳到業務服務器,圖片另外用圖床存都是可以的。還有一些用戶的使用偏好配置等信息也要保存到雲端,本地可以留少許的數據;我有一個朋友前兩天發朋友圈說自己某信所有聊天信息都沒有了,不知道是咋回事,結果各種倒騰了一天終於搞好,但是損失的時間成本和溝通成本是無法估量的,由此可見像這種極端異常情況如果處理好了,帶來的價值遠遠是高於做這些優化所付出的成本的。
最後建議一點,PM在日常開發過程中也需要把這些細節作為整個項目的一個需求去認真的落地,因為只有像這樣才能夠打磨出真正的精品。