產(chǎn)品設(shè)計(jì)時(shí)的App性能需求考量

1 評(píng)論 7685 瀏覽 26 收藏 15 分鐘

智能手機(jī)的普及比電腦要短,但目前已經(jīng)成為了我們生活中必不可少的工具了。手機(jī)的性能和配置也在不斷提高,作為產(chǎn)品經(jīng)理,需要基于用戶(hù)最常關(guān)注的性能問(wèn)題,明確產(chǎn)品設(shè)計(jì)的需求。本文將探討產(chǎn)品設(shè)計(jì)時(shí)的App性能需求考量,一起來(lái)看看吧。

智能手機(jī)的普及時(shí)間遠(yuǎn)比電腦要短,但其已成為人們生活中更為重要的設(shè)備了。隨著時(shí)代的發(fā)展,智能手機(jī)的配置也在發(fā)生巨大的變化,無(wú)論是CPU性能還是內(nèi)存容量都在以肉眼可見(jiàn)的方式不斷提升。

除此之外,App在使用時(shí)的耗電量、流量、發(fā)熱情況等也是用戶(hù)極為關(guān)心的,這些其實(shí)都屬于性能方面。作為產(chǎn)品經(jīng)理,需要基于用戶(hù)最常關(guān)注的性能問(wèn)題,明確產(chǎn)品設(shè)計(jì)的需求。

一、Android手機(jī)為何普遍比較卡頓

很多用戶(hù)對(duì)Android手機(jī)存在著極大的“偏見(jiàn)”,覺(jué)得Android手機(jī)很卡,蘋(píng)果手機(jī)不卡。

1. 系統(tǒng)生態(tài)

造成這種差異的原因很多,最核心的是Android系統(tǒng)生態(tài)問(wèn)題。由于谷歌主張的開(kāi)源策略,諸多手機(jī)廠商都會(huì)基于原生Android系統(tǒng)定制新系統(tǒng),加之不同手機(jī)廠商研發(fā)水平不同,從而造成部分手機(jī)易卡頓的情況。相比之下,iOS系統(tǒng)則是從系統(tǒng)到App完全封閉打造,App開(kāi)發(fā)者必須完全遵從蘋(píng)果生態(tài)要求,從而使得系統(tǒng)全局對(duì)App有更好的管理。

2. 硬件配置

除了系統(tǒng)生態(tài),App自身的原因也會(huì)導(dǎo)致卡頓情況發(fā)生。

手機(jī)的硬件配置是一個(gè)非常重要的原因。蘋(píng)果手機(jī)憑借著完全自研的CPU芯片,與自研的系統(tǒng)完美結(jié)合,從而可以更加充分地發(fā)揮出硬件性能。Android手機(jī)則使用了第三方CPU廠商的芯片,系統(tǒng)與硬件的配合并不能做到像蘋(píng)果手機(jī)那樣完美,只能靠提升配置來(lái)彌補(bǔ)。不過(guò)目前很多Android手機(jī)的配置已遠(yuǎn)超蘋(píng)果手機(jī),所以配置上基本已經(jīng)達(dá)標(biāo)。

3. App“抱團(tuán)”

很多國(guó)產(chǎn)App廠商,為了盡可能占用用戶(hù)的使用時(shí)間,想盡各種辦法讓App一直處于運(yùn)行狀態(tài),無(wú)論是在手機(jī)后臺(tái)運(yùn)行還是使用其他方式。為了達(dá)到這樣的目的,甚至?xí)氨F(tuán)作戰(zhàn)”,比如某公司旗下有10款A(yù)pp,在用戶(hù)啟動(dòng)了其中一個(gè)App后,該App就會(huì)想辦法在后臺(tái)啟動(dòng)其他9個(gè)App,一旦啟動(dòng),這些App就處于“抱團(tuán)”的狀態(tài),互相之間彼此牽制,其中一個(gè)App被“殺死”,另一個(gè)App就會(huì)想辦法再把被“殺死”的App喚醒,這樣會(huì)使系統(tǒng)的內(nèi)存資源逐漸消耗掉,從而造成卡頓的情況。

這種行為從公司層面看無(wú)可厚非,但從用戶(hù)的角度看,極大地傷害了用戶(hù)體驗(yàn),這是以完成KPI為目的的“作惡”行為。有時(shí)App中所表現(xiàn)出的功能及做法,也是一個(gè)產(chǎn)品經(jīng)理人品和一家公司調(diào)性的體現(xiàn)。

4. 內(nèi)存泄漏

內(nèi)存泄漏也有可能造成App卡頓。要理解內(nèi)存泄漏的原因,首先需要大概了解系統(tǒng)中App的運(yùn)行機(jī)制。簡(jiǎn)單來(lái)說(shuō),App啟動(dòng)后,系統(tǒng)會(huì)為App分配一塊內(nèi)存空間,App需要的越多分配得就越多,當(dāng)App不需要該內(nèi)存空間時(shí),就將其釋放出來(lái)供其他App使用。如果某個(gè)App無(wú)需運(yùn)行,但占據(jù)的內(nèi)存無(wú)法釋放,就會(huì)造成系統(tǒng)中內(nèi)存的浪費(fèi),從而引發(fā)App的運(yùn)行速度變慢,甚至整個(gè)系統(tǒng)都無(wú)法響應(yīng)。

內(nèi)存泄漏的情況并不只發(fā)生在Android系統(tǒng)中,iOS系統(tǒng)中同樣會(huì)發(fā)生,大部分情況都是App開(kāi)發(fā)者在內(nèi)存回收方面沒(méi)有做好處理導(dǎo)致的。

二、App的耗電量

在功能機(jī)時(shí)代,手機(jī)充一次電,可以輕松用上一個(gè)星期,進(jìn)入智能機(jī)時(shí)代后,一天一充或多充都很常見(jiàn)。當(dāng)然,正常使用手機(jī)導(dǎo)致的掉電,用戶(hù)能接受,但有時(shí)只要手機(jī)上裝了某些App,哪怕沒(méi)有使用手機(jī),耗電也很快,就會(huì)讓用戶(hù)難以接受。

對(duì)于手機(jī)廠商,從系統(tǒng)層面控制App的耗電量是必須考慮的。另外,App自身也得想辦法降低自己給手機(jī)帶來(lái)的耗電影響。

常見(jiàn)的會(huì)導(dǎo)致耗電量增加的因素主要有這幾個(gè)方面:CPU及內(nèi)存的高頻使用帶來(lái)的電量消耗,數(shù)據(jù)傳輸造成的電量消耗,使用定位(尤其是GPS定位)帶來(lái)的電量消耗,屏幕亮度過(guò)高造成的電量消耗,以及各種傳感器的使用帶來(lái)的電量消耗等。

為避免CPU及內(nèi)存的高頻使用帶來(lái)的電量消耗,在App退到后臺(tái)后,應(yīng)盡量減少App的主動(dòng)運(yùn)行;為避免數(shù)據(jù)傳輸造成的電量消耗,設(shè)計(jì)產(chǎn)品時(shí)可考慮將常用數(shù)據(jù)緩存到本地,避免每次都請(qǐng)求加載網(wǎng)絡(luò)數(shù)據(jù);App中要使用GPS或其他傳感器時(shí),應(yīng)盡可能地控制這些傳感器的使用時(shí)間及使用頻率,只在必要時(shí)才提示用戶(hù)開(kāi)啟使用它們,其他時(shí)間則無(wú)須一直開(kāi)啟。

三、App的安裝包大小

App的功能越做越復(fù)雜,導(dǎo)致安裝包的大小也越來(lái)越大。盡管現(xiàn)在人們的手機(jī)流量已經(jīng)很充裕,但用戶(hù)在只想體驗(yàn)?zāi)钞a(chǎn)品時(shí),卻發(fā)現(xiàn)產(chǎn)品App的安裝包有好幾百M(fèi)B大,這時(shí)或多或少會(huì)猶豫,一是下載會(huì)消耗流量,二是下載時(shí)間較長(zhǎng),除非“剛需”則八成會(huì)放棄下載。并且,關(guān)于App安裝包大小對(duì)App下載量的影響,曾有過(guò)相關(guān)統(tǒng)計(jì),當(dāng)App的安裝包大小每增加6MB時(shí),App下載量會(huì)下降1%。所以,產(chǎn)品經(jīng)理,以及開(kāi)發(fā)者,要想辦法讓App在保持功能不變的情況下,盡可能縮減安裝包大小。

為了更好地完成這件事,下面先來(lái)了解一下安裝包由哪些部分組成,這可以幫助我們明確優(yōu)化方向。

1. Android的App安裝包

先說(shuō)說(shuō)Android的App安裝包。Android的App安裝包是APK格式的文件,在應(yīng)用市場(chǎng)中下載App安裝包,并將其解壓縮后,會(huì)發(fā)現(xiàn)APK文件中包含了一些共同的內(nèi)容,如圖6-60所示。

圖6-60 Android App安裝包解壓縮后的目錄結(jié)構(gòu)

AndroidManifest.xml文件:該文件是Android App安裝包中的配置文件,包含了App的配置信息,包括App的包名、App中所使用的組件、各頁(yè)面的Activity名稱(chēng)及使用的第三方lib名稱(chēng)。

assets文件夾:該文件夾中保存的是文件的原始格式,即App中需要用到的固定文件,如字體文件或需要引用的音視頻文件。

classes.dex系列文件:在Android系統(tǒng)中,這些文件是可以直接在Dalvik虛擬機(jī)上運(yùn)行的文件,由Java源代碼經(jīng)過(guò)開(kāi)發(fā)工具編譯后轉(zhuǎn)換而成。轉(zhuǎn)換的目的是方便硬件更好地運(yùn)行這些代碼,而且轉(zhuǎn)換后的文件體積也會(huì)減小。

lib文件夾:很多App的開(kāi)發(fā)者會(huì)使用第三方庫(kù),后綴名多為.so,是一種二進(jìn)制文件,類(lèi)似于Windows系統(tǒng)中的dll文件。

META-INF文件夾:該文件夾中主要保存描述jar文件中信息和簽名相關(guān)信息的文件。

r文件夾:App中用到的資源文件,比如頁(yè)面布局xml文件,App中的固定圖標(biāo)及圖片文件等。

resources.arsc文件:該文件可以理解為資源的索引表或目錄,其中記錄了各種資源ID信息、資源名稱(chēng)、資源路徑及對(duì)應(yīng)值,App運(yùn)行過(guò)程中AssetManager會(huì)通過(guò)該索引表找到需要的具體資源。

從組成目錄及文件歸類(lèi),可將這些文件劃分為資源文件及代碼文件,classes.dex系列文件和lib文件夾中的文件都可以算作代碼文件,剩下的基本上都可以算作資源文件。要調(diào)整這兩類(lèi)文件的文件大小,具體可以怎么著手呢?

首先,對(duì)于代碼類(lèi)型的文件,應(yīng)盡可能優(yōu)化代碼,使文件大小減小??赏ㄟ^(guò)剔除無(wú)用的lib庫(kù),刪除代碼中的無(wú)用功能,優(yōu)化代碼中的冗余代碼,將重復(fù)代碼通過(guò)封裝簡(jiǎn)化來(lái)減小文件大小。另外,因classes.dex系列文件是由Java代碼轉(zhuǎn)換后生成的文件,所以這類(lèi)文件的大小與代碼中的方法數(shù)有很大關(guān)系,方法數(shù)過(guò)多會(huì)造成轉(zhuǎn)換后的文件變大,這時(shí)開(kāi)發(fā)者可通過(guò)減少代碼中的非必要方法來(lái)達(dá)到目的。除了上面提到的幾種方法,還存在一種方法可以間接起到作用,這就是將代碼混淆。因?yàn)榇a混淆后,代碼中的類(lèi)名、字段名及方法名均被簡(jiǎn)化并替換成無(wú)實(shí)際意義的名稱(chēng),這樣可減小最終生成的classes.dex文件的大小,從而減小安裝包的大小。

然后,就是從資源文件角度優(yōu)化了。資源文件中隨著版本迭代,可能會(huì)出現(xiàn)曾使用,現(xiàn)在已經(jīng)不再使用,但卻沒(méi)有及時(shí)刪除的功能的情況,所以每次發(fā)布新版本時(shí)可以讓開(kāi)發(fā)者及時(shí)清理App中不再使用的資源文件,比如無(wú)效xml代碼及圖片資源等。如果實(shí)在無(wú)法刪除,還可以對(duì)資源文件中的圖片、音頻、視頻等進(jìn)行壓縮處理。

2. iOS的App安裝包

再來(lái)說(shuō)說(shuō)iOS的App安裝包。iOS的App安裝包格式為IPA,將IPA文件解壓縮后會(huì)得到如圖6-61所示的目錄,其中包含了4部分內(nèi)容,iTunesArtwork是一個(gè)沒(méi)有后綴名的圖片,用途是在iTunes中顯示App的圖標(biāo);另一個(gè)是iTunesMetadata.plist文件,用來(lái)記錄開(kāi)發(fā)者及App的基本信息;META-INF文件夾則保存了一些簽名信息;最關(guān)鍵的是Payload這個(gè)文件夾,其中有一個(gè).app文件,這是安裝程序的主程序。

圖6-61 iOS App安裝包解壓縮后的目錄結(jié)構(gòu)

在Payload文件夾中找到.app文件后,繼續(xù)執(zhí)行解壓縮或者直接顯示包內(nèi)容,能看到更多文件,這些文件又可以分成以下這幾類(lèi)。

簽名文件:主要放置在_CodeSignature文件夾中,記錄了所有資源的簽名信息。

資源文件:找到Payload文件夾中的.app文件,點(diǎn)擊右鍵并選擇“顯示包內(nèi)容”,可以查看到App在運(yùn)行過(guò)程中用到的資源文件,比如圖片、音視頻及其他配置文件。

可執(zhí)行代碼文件:這類(lèi)文件是App中的主體內(nèi)容,是確保App功能得以實(shí)現(xiàn)的重要部分。

其他支持文件:這部分文件又包含了多種不同類(lèi)型的文件,如開(kāi)發(fā)過(guò)程中會(huì)用到的第三方庫(kù)文件及一些插件等。

了解了安裝包文件中包含的文件后,對(duì)于如何減小安裝包大小,就應(yīng)該有思路了。大體上還是與Android App安裝包一致,即減小代碼文件、資源文件及其他支持文件的大小,通過(guò)優(yōu)化代碼、壓縮資源文件、刪除非必要支持文件等方式達(dá)到目的。

本文節(jié)選自作者新書(shū)《產(chǎn)品經(jīng)理技術(shù)手冊(cè)》,本書(shū)定位于讓不懂技術(shù)的產(chǎn)品經(jīng)理從產(chǎn)品經(jīng)理的工作和思考方式切入了解應(yīng)該掌握的技術(shù)原理。

專(zhuān)欄作家

小風(fēng)老師,公眾號(hào):村上風(fēng),人人都是產(chǎn)品經(jīng)理專(zhuān)欄作家?!懂a(chǎn)品經(jīng)理技術(shù)手冊(cè)》作者,互聯(lián)網(wǎng)從業(yè)者,獨(dú)立原創(chuàng)音樂(lè)人。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來(lái)自Unsplash,基于CC0協(xié)議。

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 棒~(yú)

    來(lái)自中國(guó) 回復(fù)