如今,手機和各類移動端應用現已經成為人們日常生活的重要組成部分,因此,應用的數量不斷飆升(如今已上線的安卓應用至少達到210萬[1])。對于安卓開發商,在應用領域競爭日益激烈的背景下,打造可以使終端用戶滿意的應用正變得空前重要。
作為安卓應用開發商的您知道使應用終端用戶滿意的關鍵是什么嗎?答案是高性能。實際上,96%的終端用戶都認為應用的性能非常重要[2]。下面,我們將討論能夠使終端用戶獲得滿意的用戶體驗的五種方式。
在進入正題前,我想先介紹一下高性能的定義以及它為何在使終端用戶獲得滿意的用戶體驗方面至關重要。
高性能的安卓應用能夠合理地使用設備資源,幫助終端用戶迅速實現目標任務。實際上,高性能應用還可縮短終端用戶體驗到的感知延遲。
在這里,感知延遲是一個重要術語:它是指終端用戶所體驗的從點擊按鈕到界面發生變化這段時間內的時間差。根據終端用戶所采取行動和數據獲取來源的不同,我們可以有很多種方法來縮短感知延遲。
現在,讓我們來分析一下終端用戶互動和數據加載的五種情景,探討作為安卓應用開發商的您能夠采取何種方式來縮短感知延遲,并讓應用對終端用戶需求做出迅速且貼心的響應。
從最近的資源加載
您所開發的安卓應用的終端用戶遍布全球,并且毫無疑問,這些用戶越來越依賴移動化的生活方式。
您的終端用戶和向應用提供數據的網絡服務器之間的距離難以保證始終處于掌控之中,而這也正是延遲變長的主要原因。
為了減少感知延遲,您應盡可能從距離較近的的資源向應用提供大部分的數據;此外,許多未授權的API請求可在最近資源被清除,這樣就可以避免與后端服務器之間的往返傳輸,進而提高了對終端用戶需求的響應速度。
Akamai智能邊緣平臺[3]可提供開箱即用的服務。借助Akamai,您可以讓數據總是從最優化的資源加載,這樣就可以提高應用的性能,您的終端用戶也可以輕易地獲取數據內容。
2. 緩存和預取
許多從網絡服務器加載的資源常常都在不斷地進行重復使用。智能緩存機制可以將對象或API響應存儲一段時間,以供重復使用,從而縮短冗長的來回傳輸時間。許多網絡或圖像加載數據庫已經可以提供這種功能,您可以根據需要進行配置。這些緩存對象能夠瞬時加載,因此延遲時間很短,終端用戶根本不會察覺到有任何滯后。
有了這些數據庫,當緩存內容過期時,會對其進行標記,以便從網絡中重新加載。根據這些信息,您可以為數據庫設定保存再利用緩存對象的時間。許多這樣的數據庫也支持HTTP報文頭,比如max-age等。這可以幫助您在無需加速應用更新的情況下控制緩存能力以及直接從服務器加載的緩存內容的生命周期。
然而,在例如提供直播體育賽事比分的應用等一些情況下,緩存可能并不適用。對于此類應用,作為安卓應用開發商的您可以繼續從網絡加載數據。如果您從最近的資源加載數據(請見上文),對于提升應用性能的作用并不顯著。
在某些情況下,您可能知道終端用戶下一步將要做些什么。例如,電子書閱讀應用可以預知,當終端用戶正在讀一本書的某一頁時,他們可能會向前或向后翻。基于這種認知,該應用可以提前預取幾頁然后進行緩存。這樣,當終端用戶翻到這幾頁時,頁面就可以瞬時加載。
類似的,在電商應用中,如果終端用戶瀏覽到第四行的商品,他們有可能也會翻看下一頁的商品。如果應用能預取下一頁內容并進行緩存,那么當終端用戶翻到下一頁時,數據就可以瞬時加載。
正如您看到的這樣,您可以使用多種方式預取并緩存數據,以此降低感知延遲,從而提高終端用戶的使用的滿意度。
3. 迅速加載API的響應速度
應用頻繁使用API。如果API響應能迅速加載,那么終端用戶不必耗費太多等待時間,而將更多時間用于使用應用上。
為此,您作為安卓應用開發商需確保有盡可能多的應用從盡可能近的資源(即:網絡邊緣,請見上文)中加載。這樣,只有那些必須訪問源服務器的API請求,才需要經歷可能長達半個地球距離的漫長“旅程”。
另一種方法是縮減應用和后端服務器之間傳輸的數據大小,以此加快API響應速度。為此,您可以探索Colfer[4]或谷歌的協議緩沖[5](也稱為Protobuf)等數據格式,而不是JSON。在將數據傳至網絡之前需將數據轉化為二進制,與JSON相比,這種格式可大幅縮減API請求/響應的字節長度。值得注意的是,為了啟動與Protobuf的協作,您的網絡服務器和應用都需要額外的投入;不過,在許多情況[6]下,采用Protobuf獲得的性能提升遠超過啟動它所需做出的努力。
迅速加載API的響應速度、優化感知延遲的第三種方法是緩存或預取可預測且重復的API響應。在緩存時,作為安卓應用開發商的您可將API響應存儲至本地數據庫表中,這樣讀取速度就能比從網絡中讀取的速度更快。這個本地數據庫可根據自己的邏輯加以清空或刷新,不過,從本地數據庫加載,然后再刷新的過程有助于實現最佳性能及最短的感知延遲。
4. 優化圖像和視頻
除了API之外,終端用戶還可能需要加載很多的圖像和視頻。一般來說,應用加載的圖像也可在同一應用的網站等其它地方使用。
與移動端應用相比,使用電腦打開的網站圖像對屏幕大小、分辨率和設備類型的要求有所不同。很重要的一點是,應用上的圖像需要根據資源有限的移動設備進行優化。移動端應用上的視頻亦是如此。
即便當這些媒體從最近的資源加載數據,它們也可能達不到最快的速度;因此,作為應用供應商,您還需要確定圖像和視頻是否得到了優化。這些對象的絕對大小以及全球移動數據網絡的不可預測性很容易抵消您僅用就近服務器就能實現降低延遲的優勢。
為了實現這種優化,需要確保移動端應用具有最合適的分辨率和大小,以便加載圖像或視頻。如果這些設備太大,那么下載就會花費很長時間;如果它們太小,那么在屏幕上則會顯示馬賽克。
Akamai圖像管理器(Akamai Image Manager)[7]是一種可以幫助安卓應用開發商利用單一的高質量原圖對諸多移動設備進行自動優化的解決方案。這種優化也可使圖像和視頻的緩存變得更加容易。如果設備類型數量有限,您也可以存儲同一張圖像的多份不同副本。
圖像常常包括很多不常用于應用中的EXIF數據[8](例如,拍照時設置相機細節)。Akamai Image Manager可對此進行自動優化,不過您也可以利用tinypng[9]等服務手工清除這些數據。這種優化可以縮小圖像文件的大小,從而縮短加載時間。
另一種優化方式是利用漸進圖像和自適應視頻流。借助這種優化,終端安卓應用就無需等待整張圖像下載;應用可逐步地下載這些圖像,并在其下載時就開始顯示。這可避免終端用戶進入空白圖像視圖,同時縮短感知延遲。類似的,自適應視頻緩沖技術可根據網絡條件動態地調整視頻質量。當帶寬較小時,它可調低視頻分辨率,以便終端用戶能看到部分視頻,而不是僅看到正在加載中的屏幕。
除了PNG和JPEG圖像,您也可以嘗試WebP格式。雖然創建WebP格式的圖像需要花費更多時間,但加載時卻更加高效。在本地或網絡加載過程中,嘗試SVG圖像是另一種節省磁盤空間的有效方法。
5. 優化本地動畫和過渡
動畫在幫助終端用戶獲得滿意的用戶體驗、以及告知用戶活動方面起著重要的作用。與性能相比,動畫與感知延遲有著更明顯的關系。
過長的動畫加載時間會使終端用戶感到煩躁和無趣;太短或卡頓的動畫會讓終端用戶難以理解內容的含義。兩種情況都會給您的終端用戶留下不好的體驗。電池耗量也是設計精良的動畫必須考慮的一個方面,動畫在提供愉悅的用戶體驗的同時,還需要做到消耗盡可能少的資源。
根據Material Design guidelines by Google[10],移動設備上較長的動畫的長度為300-400毫秒,較短的動畫為150-200毫秒。比這些更長或更短的動畫可能會讓人感覺有滯后或是難以跟上。Material Design guidelines on motion[11]是通過例子了解這些時間范圍的好選擇。
所以,為了讓終端用戶更好地理解短動畫的內容,動畫的持續時間應在150-200毫秒之間。類似的,任何過渡輔助(比如從一個屏幕轉到另一個屏幕)都不應長于400毫秒。傾向于重復的動畫(比如進度條)應遵循類似的原則。單段動畫的長度可以在300-400毫秒之間,這樣它就可以在進度條退出前進行循環。
如果您想了解更多關于人類感知動作的信息,請閱讀名為Human Processor Model[12]的研究。
結論
高性能的關鍵是綜合考慮數據細節并謹慎地利用資源。幸運的是,我們有很多種方式來實現這個目標。
除了上述五大秘訣之外,我還想向安卓應用開發商強烈推薦另外兩種資源——The Art of Computer Programming[13]和Introduction to Algorithms[14],它們可以幫助您遵循最佳編碼實踐并利用最高效的算法,打造高性能的安卓應用,使終端用戶獲得滿意的用戶體驗。
上一篇:芯痛不是猝死,看華為如何“中興”
下一篇:最后一頁
推薦閱讀
史海拾趣
Akustica 公司是一家微機電系統(MEMS)技術公司,于2001年成立于美國匹茲堡,后來成為博世集團(Bosch)的子公司。以下是關于 Akustica 公司發展的五個相關故事:
公司成立和早期發展: Akustica 公司成立于2001年,由匹茲堡卡內基梅隆大學的研究團隊創建。該公司專注于 MEMS 技術的研發和創新,致力于開發高性能的聲學傳感器和系統解決方案。在成立初期,Akustica 聚焦于市場需求日益增長的消費電子和汽車應用領域,并不斷推出創新產品,贏得了市場認可。
博世收購: 隨著市場競爭的加劇和技術進步的不斷推動,Akustica 公司于2009年被博世集團收購。作為全球領先的技術和服務供應商,博世集團的收購加速了 Akustica 的發展步伐,并為其提供了更廣闊的市場和資源,以加速產品創新和業務擴展。
技術創新和產品發展: 在博世集團的支持下,Akustica 公司不斷進行技術創新和產品開發,推出了一系列聲學傳感器產品,包括麥克風、揚聲器和超聲波傳感器等。這些產品在消費電子、汽車、工業和醫療等領域得到了廣泛應用,為用戶提供了更優質的聲音和聲學體驗。
市場拓展和全球業務: 隨著技術和產品的不斷進步,Akustica 公司逐漸拓展了全球業務,并與各行各業的客戶建立了合作關系。公司在美國、歐洲和亞洲等地建立了銷售和服務網絡,以更好地滿足客戶的需求,并開拓新的市場機會。
持續發展和未來展望: Akustica 公司作為博世集團的一部分,繼續致力于聲學傳感器技術和產品的創新,不斷提升產品性能和功能,以滿足不斷變化的市場需求。未來,公司將繼續加強在智能手機、智能家居、車載系統、工業自動化和醫療設備等領域的業務拓展,助力客戶實現更加智能、便捷和安全的生活和工作環境。
隨著時間的推移,Equinox的成功吸引了越來越多的投資者。公司開始尋求全球擴張的機會,并在不同國家和地區開設新的健身俱樂部。同時,Equinox還推出了多個子品牌,如E By Equinox、SoulCycle等,以滿足不同消費者的需求。這些品牌涵蓋了從高端豪華到平價實惠的全方位市場,進一步鞏固了Equinox在健身行業的領先地位。
岑科公司成立于2001年,初期主要從事電子元器件的貿易業務。在創始人蔡旌章的帶領下,岑科以優質的服務和靈活的運營策略,在國內外市場上贏得了良好的口碑。這一時期,岑科的服務對象主要是海內外的電子元器件需求商,通過精準把握市場需求和優質的產品供應,逐漸在電子元器件貿易領域站穩了腳跟。隨著業務的不斷拓展,岑科開始思考如何進一步提升自身的競爭力,以實現更長遠的發展。
在過去,國內企業在車載信號傳輸領域的共模電感選擇有限,主要依賴進口品牌。岑科意識到這一市場的巨大空缺后,決定借助自主研發設備的優勢進行研發工作。經過兩三年的攻關,岑科成功研發出了ACML系列共模電感。這一系列產品在溫度特性上表現優異,可在-40℃到150℃的范圍內正常工作,并適用于CAN-BUS、CAN-FD、A2B及以太網等多種場景。岑科的這一研發成果不僅填補了國內市場空白,還實現了國產替代,為汽車電子行業的發展做出了重要貢獻。
在發展過程中,American Electric公司也面臨過各種挑戰和危機。例如,XXXX年,公司遭遇了一次嚴重的自然災害,導致部分電力設施受損。然而,公司迅速啟動了應急響應機制,組織搶修隊伍進行搶修,并在最短時間內恢復了供電。此外,在面對政策調整、市場競爭等挑戰時,公司也能夠靈活應對,通過調整戰略、優化管理等方式保持穩健發展。
近年來,芯邦科技的營收規模逐漸增大,從2020年到2022年,公司的營業收入分別達到了0.99億元、1.75億元和1.92億元。盡管增速呈現下降趨勢,但芯邦科技在電子行業中依然保持著穩健的市場表現。同時,公司也注重研發投入,不斷提升產品的技術水平和市場適應性。
最近做一個項目使用IWOW的TR800來做GPRS數傳應用,突然想到一個問題,既然我得GPRS模塊分配到的是內網ip,那么如果我想和其他局域網里的主機通訊,他們的ip肯定也是內網ip如192.XX.XX.XX,那么應該如何做呢?… 查看全部問答∨ |
|
大家幫我分析一下這個電路圖的原理吧 初次接觸這種設計,很惱火。 首先這是一個升壓電路圖,是一個DC-DC Converter 目的是輸入在十個毫伏左右,而輸出能達到1V,這是我的畢業設計題目,變壓器和JFET組成的前端是振蕩電路 ...… 查看全部問答∨ |
|
我用MSP430G2121單片機編寫旋轉編碼開關的程序,編碼開關為EC11(30點位15脈沖的)。我用下降沿觸發中斷做的。我設置了下降沿觸發中斷,但是編碼開關轉了一圈發現有些地方不能進入中斷(中斷函數開始處設置斷點),請問是怎么回事啊?我的程序如下 ...… 查看全部問答∨ |
|
為什么(0,1,2,3)在數碼管上不顯示? 求高人指導 源程序(ICC-AVR)如下: #include<iom16v.h> #include<macros.h> #define uchar unsigned char #define uint unsigned int uchar Key; #pragma data:code flash tab ...… 查看全部問答∨ |