打造令用戶滿意的高性能安卓應(yīng)用的五大秘訣
如今,手機和各類移動端應(yīng)用現(xiàn)已經(jīng)成為人們?nèi)粘I畹闹匾M成部分,因此,應(yīng)用的數(shù)量不斷飆升(如今已上線的安卓應(yīng)用至少達(dá)到210萬 )。對于安卓開發(fā)商,在應(yīng)用領(lǐng)域競爭日益激烈的背景下,打造可以使終端用戶滿意的應(yīng)用正變得***重要。
作為安卓應(yīng)用開發(fā)商的您知道使應(yīng)用終端用戶滿意的關(guān)鍵是什么嗎?答案是高性能。實際上,96%的終端用戶都認(rèn)為應(yīng)用的性能非常重要 。下面,我們將討論能夠使終端用戶獲得滿意的用戶體驗的五種方式。
在進(jìn)入正題前,我想先介紹一下高性能的定義以及它為何在使終端用戶獲得滿意的用戶體驗方面至關(guān)重要。
高性能的安卓應(yīng)用能夠合理地使用設(shè)備資源,幫助終端用戶迅速實現(xiàn)目標(biāo)任務(wù)。實際上,高性能應(yīng)用還可縮短終端用戶體驗到的感知延遲。
在這里,感知延遲是一個重要術(shù)語:它是指終端用戶所體驗的從點擊按鈕到界面發(fā)生變化這段時間內(nèi)的時間差。根據(jù)終端用戶所采取行動和數(shù)據(jù)獲取來源的不同,我們可以有很多種方法來縮短感知延遲。
現(xiàn)在,讓我們來分析一下終端用戶互動和數(shù)據(jù)加載的五種情景,探討作為安卓應(yīng)用開發(fā)商的您能夠采取何種方式來縮短感知延遲,并讓應(yīng)用對終端用戶需求做出迅速且貼心的響應(yīng)。
1. 從最近的資源加載
您所開發(fā)的安卓應(yīng)用的終端用戶遍布全球,并且毫無疑問,這些用戶越來越依賴移動化的生活方式。
您的終端用戶和向應(yīng)用提供數(shù)據(jù)的網(wǎng)絡(luò)服務(wù)器之間的距離難以保證始終處于掌控之中,而這也正是延遲變長的主要原因。
為了減少感知延遲,您應(yīng)盡可能從距離較近的的資源向應(yīng)用提供大部分的數(shù)據(jù);此外,許多未授權(quán)的API請求可在最近資源被清除,這樣就可以避免與后端服務(wù)器之間的往返傳輸,進(jìn)而提高了對終端用戶需求的響應(yīng)速度。
Akamai智能邊緣平臺 可提供開箱即用的服務(wù)。借助Akamai,您可以讓數(shù)據(jù)總是從***化的資源加載,這樣就可以提高應(yīng)用的性能,您的終端用戶也可以輕易地獲取數(shù)據(jù)內(nèi)容。
2. 緩存和預(yù)取
許多從網(wǎng)絡(luò)服務(wù)器加載的資源常常都在不斷地進(jìn)行重復(fù)使用。智能緩存機制可以將對象或API響應(yīng)存儲一段時間,以供重復(fù)使用,從而縮短冗長的來回傳輸時間。許多網(wǎng)絡(luò)或圖像加載數(shù)據(jù)庫已經(jīng)可以提供這種功能,您可以根據(jù)需要進(jìn)行配置。這些緩存對象能夠瞬時加載,因此延遲時間很短,終端用戶根本不會察覺到有任何滯后。
有了這些數(shù)據(jù)庫,當(dāng)緩存內(nèi)容過期時,會對其進(jìn)行標(biāo)記,以便從網(wǎng)絡(luò)中重新加載。根據(jù)這些信息,您可以為數(shù)據(jù)庫設(shè)定保存再利用緩存對象的時間。許多這樣的數(shù)據(jù)庫也支持HTTP報文頭,比如max-age等。這可以幫助您在無需加速應(yīng)用更新的情況下控制緩存能力以及直接從服務(wù)器加載的緩存內(nèi)容的生命周期。
然而,在例如提供直播體育賽事比分的應(yīng)用等一些情況下,緩存可能并不適用。對于此類應(yīng)用,作為安卓應(yīng)用開發(fā)商的您可以繼續(xù)從網(wǎng)絡(luò)加載數(shù)據(jù)。如果您從最近的資源加載數(shù)據(jù)(請見上文),對于提升應(yīng)用性能的作用并不顯著。
在某些情況下,您可能知道終端用戶下一步將要做些什么。例如,電子書閱讀應(yīng)用可以預(yù)知,當(dāng)終端用戶正在讀一本書的某一頁時,他們可能會向前或向后翻?;谶@種認(rèn)知,該應(yīng)用可以提前預(yù)取幾頁然后進(jìn)行緩存。這樣,當(dāng)終端用戶翻到這幾頁時,頁面就可以瞬時加載。
類似的,在電商應(yīng)用中,如果終端用戶瀏覽到第四行的商品,他們有可能也會翻看下一頁的商品。如果應(yīng)用能預(yù)取下一頁內(nèi)容并進(jìn)行緩存,那么當(dāng)終端用戶翻到下一頁時,數(shù)據(jù)就可以瞬時加載。
正如您看到的這樣,您可以使用多種方式預(yù)取并緩存數(shù)據(jù),以此降低感知延遲,從而提高終端用戶的使用的滿意度。
3. 迅速加載API的響應(yīng)速度
應(yīng)用頻繁使用API。如果API響應(yīng)能迅速加載,那么終端用戶不必耗費太多等待時間,而將更多時間用于使用應(yīng)用上。
為此,您作為安卓應(yīng)用開發(fā)商需確保有盡可能多的應(yīng)用從盡可能近的資源(即:網(wǎng)絡(luò)邊緣,請見上文)中加載。這樣,只有那些必須訪問源服務(wù)器的API請求,才需要經(jīng)歷可能長達(dá)半個地球距離的漫長“旅程”。
另一種方法是縮減應(yīng)用和后端服務(wù)器之間傳輸?shù)臄?shù)據(jù)大小,以此加快API響應(yīng)速度。為此,您可以探索Colfer 或谷歌的協(xié)議緩沖 (也稱為Protobuf)等數(shù)據(jù)格式,而不是JSON。在將數(shù)據(jù)傳至網(wǎng)絡(luò)之前需將數(shù)據(jù)轉(zhuǎn)化為二進(jìn)制,與JSON相比,這種格式可大幅縮減API請求/響應(yīng)的字節(jié)長度。值得注意的是,為了啟動與Protobuf的協(xié)作,您的網(wǎng)絡(luò)服務(wù)器和應(yīng)用都需要額外的投入;不過,在許多情況 下,采用Protobuf獲得的性能提升遠(yuǎn)超過啟動它所需做出的努力。
迅速加載API的響應(yīng)速度、優(yōu)化感知延遲的第三種方法是緩存或預(yù)取可預(yù)測且重復(fù)的API響應(yīng)。在緩存時,作為安卓應(yīng)用開發(fā)商的您可將API響應(yīng)存儲至本地數(shù)據(jù)庫表中,這樣讀取速度就能比從網(wǎng)絡(luò)中讀取的速度更快。這個本地數(shù)據(jù)庫可根據(jù)自己的邏輯加以清空或刷新,不過,從本地數(shù)據(jù)庫加載,然后再刷新的過程有助于實現(xiàn)***性能及最短的感知延遲。
4. 優(yōu)化圖像和視頻
除了API之外,終端用戶還可能需要加載很多的圖像和視頻。一般來說,應(yīng)用加載的圖像也可在同一應(yīng)用的網(wǎng)站等其它地方使用。
與移動端應(yīng)用相比,使用電腦打開的網(wǎng)站圖像對屏幕大小、分辨率和設(shè)備類型的要求有所不同。很重要的一點是,應(yīng)用上的圖像需要根據(jù)資源有限的移動設(shè)備進(jìn)行優(yōu)化。移動端應(yīng)用上的視頻亦是如此。
即便當(dāng)這些媒體從最近的資源加載數(shù)據(jù),它們也可能達(dá)不到最快的速度;因此,作為應(yīng)用供應(yīng)商,您還需要確定圖像和視頻是否得到了優(yōu)化。這些對象的絕對大小以及全球移動數(shù)據(jù)網(wǎng)絡(luò)的不可預(yù)測性很容易抵消您僅用就近服務(wù)器就能實現(xiàn)降低延遲的優(yōu)勢。
為了實現(xiàn)這種優(yōu)化,需要確保移動端應(yīng)用具有最合適的分辨率和大小,以便加載圖像或視頻。如果這些設(shè)備太大,那么下載就會花費很長時間;如果它們太小,那么在屏幕上則會顯示馬賽克。
Akamai圖像管理器(Akamai Image Manager) 是一種可以幫助安卓應(yīng)用開發(fā)商利用單一的高質(zhì)量原圖對諸多移動設(shè)備進(jìn)行自動優(yōu)化的解決方案。這種優(yōu)化也可使圖像和視頻的緩存變得更加容易。如果設(shè)備類型數(shù)量有限,您也可以存儲同一張圖像的多份不同副本。
圖像常常包括很多不常用于應(yīng)用中的EXIF數(shù)據(jù) (例如,拍照時設(shè)置相機細(xì)節(jié))。Akamai Image Manager可對此進(jìn)行自動優(yōu)化,不過您也可以利用tinypng 等服務(wù)手工清除這些數(shù)據(jù)。這種優(yōu)化可以縮小圖像文件的大小,從而縮短加載時間。
另一種優(yōu)化方式是利用漸進(jìn)圖像和自適應(yīng)視頻流。借助這種優(yōu)化,終端安卓應(yīng)用就無需等待整張圖像下載;應(yīng)用可逐步地下載這些圖像,并在其下載時就開始顯示。這可避免終端用戶進(jìn)入空白圖像視圖,同時縮短感知延遲。類似的,自適應(yīng)視頻緩沖技術(shù)可根據(jù)網(wǎng)絡(luò)條件動態(tài)地調(diào)整視頻質(zhì)量。當(dāng)帶寬較小時,它可調(diào)低視頻分辨率,以便終端用戶能看到部分視頻,而不是僅看到正在加載中的屏幕。
除了PNG和JPEG圖像,您也可以嘗試WebP格式。雖然創(chuàng)建WebP格式的圖像需要花費更多時間,但加載時卻更加高效。在本地或網(wǎng)絡(luò)加載過程中,嘗試SVG圖像是另一種節(jié)省磁盤空間的有效方法。
5. 優(yōu)化本地動畫和過渡
動畫在幫助終端用戶獲得滿意的用戶體驗、以及告知用戶活動方面起著重要的作用。與性能相比,動畫與感知延遲有著更明顯的關(guān)系。
過長的動畫加載時間會使終端用戶感到煩躁和無趣;太短或卡頓的動畫會讓終端用戶難以理解內(nèi)容的含義。兩種情況都會給您的終端用戶留下不好的體驗。電池耗量也是設(shè)計精良的動畫必須考慮的一個方面,動畫在提供愉悅的用戶體驗的同時,還需要做到消耗盡可能少的資源。
根據(jù)Material Design guidelines by Google ,移動設(shè)備上較長的動畫的長度為300-400毫秒,較短的動畫為150-200毫秒。比這些更長或更短的動畫可能會讓人感覺有滯后或是難以跟上。Material Design guidelines on motion 是通過例子了解這些時間范圍的好選擇。
所以,為了讓終端用戶更好地理解短動畫的內(nèi)容,動畫的持續(xù)時間應(yīng)在150-200毫秒之間。類似的,任何過渡輔助(比如從一個屏幕轉(zhuǎn)到另一個屏幕)都不應(yīng)長于400毫秒。傾向于重復(fù)的動畫(比如進(jìn)度條)應(yīng)遵循類似的原則。單段動畫的長度可以在300-400毫秒之間,這樣它就可以在進(jìn)度條退出前進(jìn)行循環(huán)。
如果您想了解更多關(guān)于人類感知動作的信息,請閱讀名為Human Processor Model 的研究。
結(jié)論
高性能的關(guān)鍵是綜合考慮數(shù)據(jù)細(xì)節(jié)并謹(jǐn)慎地利用資源。幸運的是,我們有很多種方式來實現(xiàn)這個目標(biāo)。
除了上述五大秘訣之外,我還想向安卓應(yīng)用開發(fā)商強烈推薦另外兩種資源——The Art of Computer Programming 和Introduction to Algorithms ,它們可以幫助您遵循***編碼實踐并利用***效的算法,打造高性能的安卓應(yīng)用,使終端用戶獲得滿意的用戶體驗。