如何使你的app更加流暢

Paste_Image.png

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

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

正文

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

Paste_Image.png

優(yōu)化過程

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

檢測(cè)

主要影響用戶體驗(yàn)的性能度量有兩種阅悍。第一種好渠,我們主要關(guān)注響應(yīng)時(shí)間:你的app對(duì)一個(gè)用戶操作(比如:app的啟動(dòng),看一篇新的文章节视,加載一個(gè)聯(lián)系人列表拳锚,或者是查看一個(gè)Facebook也頁(yè)面)的響應(yīng)需要多長(zhǎng)時(shí)間。理想情況下寻行,你的app對(duì)以上這些情景響應(yīng)都很迅速霍掺,這會(huì)使得你的app有更好,更吸引人的用戶體驗(yàn)拌蜘。

關(guān)于響應(yīng)時(shí)間的一個(gè)關(guān)鍵(并且獨(dú)特)的例子是啟動(dòng)時(shí)間杆烁。app啟動(dòng)時(shí)間是一個(gè)用戶對(duì)一款app的第一印象,而第一印象是非常重要的拦坠。事實(shí)上连躏,一項(xiàng)計(jì)算機(jī)軟件調(diào)查顯示79%的用戶會(huì)在刪除這個(gè)問題app之前再次嘗試一或兩次剩岳。

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

我們建議你的app應(yīng)當(dāng)在2秒之內(nèi)完成啟動(dòng),因?yàn)檫@是用戶所期待啟動(dòng)時(shí)間的中等水平拍棕。對(duì)于那些對(duì)web性能優(yōu)化很熟悉的人晓铆,47%的用戶希望一個(gè)頁(yè)面在2秒以內(nèi)加載完畢,用戶對(duì)于他們使用活躍的移動(dòng)app更缺少耐心绰播。

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

第二重要的度量是流暢度骄噪。app在短時(shí)間內(nèi)響應(yīng)是很好的體驗(yàn),但響應(yīng)同時(shí)必須流暢蠢箩,盡量少的卡頓链蕊。用戶非常善于察覺卡頓事甜,這也意味著即使微小的卡頓也會(huì)對(duì)你的app用戶體驗(yàn)有負(fù)面影響。一般來(lái)說(shuō)滔韵,人類可以察覺22毫秒的卡頓逻谦,其中1/4的人可以洞察2毫秒—16毫秒的卡頓 — 即標(biāo)準(zhǔn)的60幀每秒的刷新率(FPS)。

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

對(duì)于Android手機(jī),UI線程(你的app執(zhí)行的主線程)是唯一能更新UI的線程症昏。為了保持60FPS的刷新率随闽,UI線程必須在16毫秒內(nèi)完成每幀的繪制。如果UI線程里任何方法的調(diào)用耗時(shí)比這更長(zhǎng)齿兔,你的app就會(huì)丟失一幀橱脸,造成短暫的卡頓。更糟糕的是在這段時(shí)間里分苇,你的app對(duì)用戶的任何操作是不響應(yīng)的因?yàn)閁I線程被一個(gè)方法的調(diào)用給阻塞了添诉。

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

建議 2:剔除耗時(shí)方法

好吧。檢測(cè)那些和用戶體驗(yàn)有關(guān)的度量非常重要惠拭,但是我們檢測(cè)這些度量的頻率是多少呢扩劝?每次構(gòu)建的時(shí)候檢測(cè)?還是每天構(gòu)建的時(shí)候职辅?或是發(fā)布之前棒呛?或是版本在生產(chǎn)環(huán)境中?域携!你應(yīng)該一有機(jī)會(huì)就檢測(cè) — 你越是頻繁地追蹤你軟件的度量簇秒,你就越早地能察覺和對(duì)性能問題做出反應(yīng)。雅虎的團(tuán)隊(duì)告訴我們?cè)诿看嗡麄兊腶pp發(fā)布前都有分析秀鞭,微信的團(tuán)隊(duì)每天構(gòu)建的時(shí)候都分析他們的app趋观。

建議 3:盡可能頻繁地檢測(cè)

分析

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

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

有時(shí)候性能問題是由你使用的第三方的SDK而不是你的代碼導(dǎo)致的噪馏。這些問題往往很難被追蹤到麦到。考慮到 org.joda.time是一個(gè)很流行的處理時(shí)間的java庫(kù)欠肾。你很可能在你以往的Java工程中用到了它瓶颠。結(jié)果表明僅僅在app啟動(dòng)的時(shí)候創(chuàng)建一個(gè)org.joda.time.DateTime()對(duì)象會(huì)導(dǎo)致啟動(dòng)言重變慢 — Yahoo Fantasy Sports這款app會(huì)啟動(dòng)慢2秒。這是因?yàn)閛rg.joda.time.DateTime()使用了getResourceAsStream()這個(gè)方法來(lái)從apk文件中加載時(shí)區(qū)數(shù)據(jù)刺桃。

建議 5:避免第三方SDK所導(dǎo)致的意外

優(yōu)化

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

你能得到幫助的地方

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市樊展,隨后出現(xiàn)的幾起案子呻纹,更是在濱河造成了極大的恐慌堆生,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雷酪,死亡現(xiàn)場(chǎng)離奇詭異淑仆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哥力,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門蔗怠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吩跋,你說(shuō)我怎么就攤上這事寞射。” “怎么了锌钮?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵桥温,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我梁丘,道長(zhǎng)侵浸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任氛谜,我火速辦了婚禮掏觉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘值漫。我一直安慰自己履腋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布惭嚣。 她就那樣靜靜地躺著遵湖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晚吞。 梳的紋絲不亂的頭發(fā)上延旧,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天拉队,我揣著相機(jī)與錄音蔓姚,去河邊找鬼鞭执。 笑死快集,一個(gè)胖子當(dāng)著我的面吹牛辕万,可吹牛的內(nèi)容都是我干的泰鸡。 我是一名探鬼主播珍特,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼届谈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缅糟!你這毒婦竟也來(lái)了挺智?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤窗宦,失蹤者是張志新(化名)和其女友劉穎赦颇,沒想到半個(gè)月后二鳄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媒怯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年订讼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扇苞。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡欺殿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳖敷,到底是詐尸還是另有隱情祈餐,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布哄陶,位于F島的核電站帆阳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏屋吨。R本人自食惡果不足惜蜒谤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望至扰。 院中可真熱鬧鳍徽,春花似錦、人聲如沸敢课。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)直秆。三九已至濒募,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間圾结,已是汗流浹背瑰剃。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留筝野,地道東北人晌姚。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像歇竟,于是被迫代替她去往敵國(guó)和親挥唠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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