如何使你的app更加流暢

Paste_Image.png

原文鏈接:http://blog.nimbledroid.com/2015/09/17/how-to-make-your-application-fluid.html

Nimbledroid.com 為您開發(fā)的應用的每一版本提供自動全面的性能分析

正文

在上一篇發(fā)布的博客中,我們討論了監(jiān)視app性能的重要性。這一回我們將要想大家詳細展示怎樣具體操作。我們和一些世界著名app的開發(fā)團隊(其中包括微信和雅虎新聞聚合的團隊)就開發(fā)流暢的app所需的最好的開發(fā)規(guī)范進行過交談。就我們的經(jīng)驗和同那些開發(fā)團隊的Leader交談的結果來看,我們發(fā)現(xiàn)開發(fā)好的app最重要的規(guī)范是建立一套app優(yōu)化流程:

Paste_Image.png

優(yōu)化過程

持續(xù)地監(jiān)測你的app的性能來檢測你的app是否表現(xiàn)不佳是非常重要的。一旦一項性能問題被檢測到,你應當集中精力去尋找問題的根源。這項診斷也許需要更多的檢測和優(yōu)化具體性能的數(shù)據(jù),這會使你陷入一個我們所謂的“檢測—分析 循環(huán)”的陷阱相當長的時間。即使在你搜尋到問題的根源后,僅僅修改好懶散的代碼是遠不夠的。你必須重估你app的度量以確保你的修改奏效。這就意味著更多的檢測。

檢測

主要影響用戶體驗的性能度量有兩種。第一種,我們主要關注響應時間:你的app對一個用戶操作(比如:app的啟動,看一篇新的文章,加載一個聯(lián)系人列表,或者是查看一個Facebook也頁面)的響應需要多長時間。理想情況下,你的app對以上這些情景響應都很迅速,這會使得你的app有更好,更吸引人的用戶體驗。

關于響應時間的一個關鍵(并且獨特)的例子是啟動時間。app啟動時間是一個用戶對一款app的第一印象,而第一印象是非常重要的。事實上,一項計算機軟件調(diào)查顯示79%的用戶會在刪除這個問題app之前再次嘗試一或兩次。

以下是在軟件性能和優(yōu)化方面有很多年經(jīng)驗的NimbleDroid所給的一些建議。

我們建議你的app應當在2秒之內(nèi)完成啟動,因為這是用戶所期待啟動時間的中等水平。對于那些對web性能優(yōu)化很熟悉的人,47%的用戶希望一個頁面在2秒以內(nèi)加載完畢,用戶對于他們使用活躍的移動app更缺少耐心。

建議 1:顯示app啟動時間在2秒以內(nèi)

第二重要的度量是流暢度。app在短時間內(nèi)響應是很好的體驗,但響應同時必須流暢,盡量少的卡頓。用戶非常善于察覺卡頓,這也意味著即使微小的卡頓也會對你的app用戶體驗有負面影響。一般來說,人類可以察覺22毫秒的卡頓,其中1/4的人可以洞察2毫秒—16毫秒的卡頓 — 即標準的60幀每秒的刷新率(FPS)。

要理解流暢度,你可以通過收集你的app的FPS和每幀耗時的數(shù)據(jù)。然而,你需要牢記:這些數(shù)據(jù)并不能告訴你app性能問題的根源,也不能幫你找出代碼里導致卡頓的方法。

對于Android手機,UI線程(你的app執(zhí)行的主線程)是唯一能更新UI的線程。為了保持60FPS的刷新率,UI線程必須在16毫秒內(nèi)完成每幀的繪制。如果UI線程里任何方法的調(diào)用耗時比這更長,你的app就會丟失一幀,造成短暫的卡頓。更糟糕的是在這段時間里,你的app對用戶的任何操作是不響應的因為UI線程被一個方法的調(diào)用給阻塞了。

按照常規(guī)來說,要想保證UI線程里每次的方法調(diào)用都在16毫秒以內(nèi)幾乎是不可能的。32毫秒是一個臨界值,相當于丟掉2幀,也更加真是。我們把那些執(zhí)行時間超過這個臨界值(超過32毫秒執(zhí)行的)方法稱之為耗時方法,因為這些方法導致了這個app暫時“掛起”了。剔除所有耗時方法可以有效地使你的app表現(xiàn)更加流暢,整體上提供一個更好的用戶體驗。

建議 2:剔除耗時方法

好吧。檢測那些和用戶體驗有關的度量非常重要,但是我們檢測這些度量的頻率是多少呢?每次構建的時候檢測?還是每天構建的時候?或是發(fā)布之前?或是版本在生產(chǎn)環(huán)境中?!你應該一有機會就檢測 — 你越是頻繁地追蹤你軟件的度量,你就越早地能察覺和對性能問題做出反應。雅虎的團隊告訴我們在每次他們的app發(fā)布前都有分析,微信的團隊每天構建的時候都分析他們的app。

建議 3:盡可能頻繁地檢測

分析

優(yōu)化你的軟件的關鍵是了解常見的性能問題的和系統(tǒng)地在你的代碼中移除他們。在我們對app下載超過5M的文件時的性能問題分析中,我們發(fā)現(xiàn)開發(fā)者經(jīng)常使用那些在桌面機器上執(zhí)行很快卻在性能較弱的移動設備上執(zhí)行非常慢的構造方法。例如:在一臺Macbook Air上ClassLoader.getResourceAsStream()這個方法獲取一個有3K大小的jar包資源花費7毫秒執(zhí)行完畢。然而2013年的Nexus 7 在同樣資源文件的情況下執(zhí)行該方法需要1700毫秒。原因是Android對getResourceAsStream這個方法的實現(xiàn)在第一次執(zhí)行的時候干了很多額外的工作,對apk文件中所有資源文件進行了索引,驗證授權的apk文件,解析它的manifest文件。類似這類的操作很耗費CPU資源,導致app明顯減速,— getResourceAsStream使Walgreens大約減速1.7倍。NimbleDroid編了一個在你的app中可以避免這種情況的方法列表。你可以在這查看。

建議 4:了解一系列的常見問題

有時候性能問題是由你使用的第三方的SDK而不是你的代碼導致的。這些問題往往很難被追蹤到。考慮到 org.joda.time是一個很流行的處理時間的java庫。你很可能在你以往的Java工程中用到了它。結果表明僅僅在app啟動的時候創(chuàng)建一個org.joda.time.DateTime()對象會導致啟動言重變慢 — Yahoo Fantasy Sports這款app會啟動慢2秒。這是因為org.joda.time.DateTime()使用了getResourceAsStream()這個方法來從apk文件中加載時區(qū)數(shù)據(jù)。

建議 5:避免第三方SDK所導致的意外

優(yōu)化

修改懶散的代碼可以是一個噩夢般的經(jīng)歷。造成app減緩、停止運行的方法有很多,排除這些問題可能會花費幾周的開發(fā)時間。與此同時,也有一些通用的修改建議。你可以一方面用更多高效的數(shù)據(jù)展現(xiàn)形式、算法和實現(xiàn)來使代碼運行地更快,或者(在那些引用第三方SDK不能直接修改代碼的情況下)你可以調(diào)用子線程的代碼以確保UI不會等待。遵循這些建議會使你在讓app更加高效,創(chuàng)造用戶喜愛的產(chǎn)品的道路上走得更遠。

你能得到幫助的地方

通常需要寶貴的時間和一些靈感來使這個性能優(yōu)化過程幫助你打造更加流暢的app。這就是我們提供給Android開發(fā)者快速,強大的優(yōu)化分析工具的原因,以保證這些開發(fā)者可以更集中精力于你們所擅長的方面:給用戶帶來美妙的產(chǎn)品。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內(nèi)容