性能優(yōu)化開(kāi)篇綜述

為什么要做性能優(yōu)化

首先引用一下 High performance iOS Apps 這本書(shū)中的一段統(tǒng)計(jì)數(shù)據(jù):

Consider the following statistics:

  • 79% of users retry an app only once or twice if it failed to work the first time.
  • 25% of users abandon an app if it does not load in 3 seconds.
  • 31% of users will tell others about their bad experience

翻譯過(guò)來(lái)的意思就是:

  • 應(yīng)用首次出錯(cuò)后,79%的用戶只會(huì)再重試一兩次

  • 當(dāng)應(yīng)用啟動(dòng)時(shí)間超過(guò)3秒時(shí),25%的用戶會(huì)放棄使用該應(yīng)用

  • 31%的用戶會(huì)將糟糕的體驗(yàn)告知他人

從上面的數(shù)據(jù)統(tǒng)計(jì)可以看出,App性能對(duì)于應(yīng)用的重要性,App能否被用戶所認(rèn)可不僅僅取決于其功能,還取決于當(dāng)與用戶交互時(shí),應(yīng)用能否提供流暢的體驗(yàn)。

從某一個(gè)角度來(lái)看,是因?yàn)槟愕腁PP是可替代的,我們可以從App Store找到大量的功能相似的替代品,為什么用戶在功能相同的情況下會(huì)堅(jiān)持使用你開(kāi)發(fā)的這一款,兩個(gè)原因:你的APP在功能上無(wú)可替代,或者是極少故障且性能格外出眾

App性能會(huì)受很多因素影響,這些因素包括內(nèi)存消耗,網(wǎng)絡(luò)請(qǐng)求效率,用戶界面的流暢性,用戶操作的響應(yīng)速度。所以我們對(duì)性能的描述有一個(gè)量化的過(guò)程,我們需要先概述不同類型的性能特征,然后再對(duì)它們進(jìn)行測(cè)量。

性能的衡量標(biāo)準(zhǔn)是什么

從用戶使用的角度來(lái)說(shuō)

一個(gè)好的移動(dòng)應(yīng)用應(yīng)該要具備以下三個(gè)特點(diǎn)

  • 可用性

  • 高性能

  • 穩(wěn)定性

可用性衡量用戶如何與你的移動(dòng)應(yīng)用程序交互。如果他們無(wú)法操作你的應(yīng)用程序,如很多功能無(wú)法使用,點(diǎn)擊界面無(wú)響應(yīng),滑動(dòng)頁(yè)面時(shí)卡頓乃至奔潰,這些情況,用戶很大可能會(huì)將你的APP從移動(dòng)設(shè)別上刪除。

高性能,這個(gè)其實(shí)是用戶感知最深的一塊,這里包括幾個(gè)小的方面,如用戶界面響應(yīng)效率,網(wǎng)絡(luò)請(qǐng)求效率,用戶交互體驗(yàn)。

  • 用戶界面響應(yīng)效率:根據(jù) Dimensional Research 的調(diào)查,49%的用戶希望應(yīng)用程序在2秒或更短的時(shí)間內(nèi)做出響應(yīng),因此檢查應(yīng)用程序的啟動(dòng)和UI性能對(duì)于應(yīng)用程序的成功至關(guān)重要。模擬不同類型的環(huán)境,以確認(rèn)應(yīng)用程序快速,順利地響應(yīng)用戶的命令。

  • 網(wǎng)絡(luò)請(qǐng)求效率:如果應(yīng)用程序在理想的網(wǎng)絡(luò)模擬中表現(xiàn)良好,那是非常棒的,但你的應(yīng)用程序也需要在不太理想的環(huán)境中運(yùn)行,在低帶寬,延遲高的不可靠網(wǎng)絡(luò)環(huán)境下,也需要有一套機(jī)制來(lái)保證數(shù)據(jù)的快速展示,這里可以使用緩存,也可以并發(fā)請(qǐng)求提供提高響應(yīng)效率。

  • 用戶交互體驗(yàn):如果用戶在滑動(dòng)列表時(shí)感覺(jué)到卡頓,點(diǎn)擊按鈕時(shí)無(wú)響應(yīng),打開(kāi)某個(gè)頁(yè)面速度很慢,就會(huì)被用戶打上 Low performance的標(biāo)簽,從而尋找同類型同功能體驗(yàn)更佳的APP,這個(gè)其實(shí)是性能優(yōu)化的核心。

穩(wěn)定性意味著它具有流暢,不間斷的體驗(yàn),不會(huì)出現(xiàn)錯(cuò)誤消息或用戶崩潰。如果應(yīng)用程序一直收到錯(cuò)誤消息的彈窗提示或者永無(wú)止境的加載屏幕,如果用戶打開(kāi)應(yīng)用程序之前一直奔潰,如果用戶使用應(yīng)用程序幾個(gè)小時(shí)之后發(fā)現(xiàn)電池是紅色的,絕大部分用戶會(huì)停止使用該應(yīng)用程序。

從技術(shù)的角度來(lái)說(shuō)

我們可以把性能量化成一個(gè)個(gè)可測(cè)量的性能指標(biāo),下面我將描述我對(duì)于性能量化的一些評(píng)判標(biāo)準(zhǔn):

1. 內(nèi)存

應(yīng)用程序內(nèi)存峰值取決與系統(tǒng)的硬件配置,占用過(guò)高的內(nèi)存會(huì)導(dǎo)致后臺(tái)應(yīng)用被強(qiáng)制關(guān)閉,同時(shí)還要確保沒(méi)有內(nèi)存泄漏,隨時(shí)間流逝持續(xù)增長(zhǎng)的內(nèi)存消耗意味著,應(yīng)用程序可能會(huì)因?yàn)閮?nèi)存不足的異常而奔潰

2. 電量消耗

電量消耗過(guò)大一般情況下會(huì)伴隨著設(shè)備發(fā)燙,電量消耗是一個(gè)涉及面很廣的場(chǎng)景,它不僅僅與計(jì)算CPU周期有關(guān),還包括高效地使用硬件。除了要實(shí)現(xiàn)電量消耗最小化,還要確保不會(huì)影響用戶體驗(yàn)。

3. 初始化時(shí)間

應(yīng)用在啟動(dòng)時(shí)應(yīng)執(zhí)行剛好夠用的任務(wù)以完成初始化,從而滿足用戶的使用需求。執(zhí)行這些任務(wù)消耗的時(shí)間就是應(yīng)用的初始化時(shí)間。啟動(dòng)時(shí)間會(huì)直接影響用戶對(duì)應(yīng)用程序的感官,秒開(kāi)的APP一般意義上來(lái)說(shuō)都是用戶喜歡的。

4. 執(zhí)行速度

當(dāng)觸發(fā)了某個(gè)操作,用戶總是希望它可以盡快地工作。一切必要的處理都應(yīng)該在盡可能短的時(shí)間內(nèi)完成。我們常用的方式是使用空間換時(shí)間,盡可能的快速響應(yīng)用戶的操作。

5. 響應(yīng)速度

每個(gè)應(yīng)用都應(yīng)該快速地響應(yīng)用戶交互。在應(yīng)用中所做的一切優(yōu)化和權(quán)衡最終都應(yīng)該體現(xiàn)在響應(yīng)速度上。

6. 本地存儲(chǔ)

用戶都希望能夠在無(wú)網(wǎng)絡(luò)或者設(shè)備離線的情況下還可以瀏覽上次的內(nèi)容,開(kāi)發(fā)人員應(yīng)該對(duì)本地存儲(chǔ)的使用有所規(guī)劃,以便應(yīng)用具備離線瀏覽的能力。同時(shí)也需要提供一個(gè)清除物理存儲(chǔ)空間與內(nèi)存緩存空間的選項(xiàng),物理存儲(chǔ)空間占用過(guò)多,會(huì)使用戶頻繁的卸載這些應(yīng)用來(lái)回收本地存儲(chǔ)。內(nèi)存消耗過(guò)多,也會(huì)導(dǎo)致應(yīng)用被系統(tǒng)殺死,所以提供一個(gè)清理緩存的選項(xiàng)是很有必要的。

7. 網(wǎng)絡(luò)請(qǐng)求

移動(dòng)設(shè)備會(huì)在不同的網(wǎng)絡(luò)環(huán)境下使用,為了確保能夠提供最好的用戶體驗(yàn),你的應(yīng)用應(yīng)該適用于各種網(wǎng)絡(luò)條件。而網(wǎng)絡(luò)請(qǐng)求的響應(yīng)速度會(huì)直接影響用戶體驗(yàn),如何做DNS優(yōu)化,連接優(yōu)化,弱網(wǎng)優(yōu)化,是我們?cè)趦?yōu)化過(guò)程中需要時(shí)刻關(guān)注的點(diǎn)。

8. 用戶界面流暢度

這個(gè)主要是我們的列表視圖,F(xiàn)PS過(guò)低會(huì)給用戶一種卡頓感,這是一種很糟糕的體驗(yàn),優(yōu)化我們的TableView,提高渲染性能,給用戶絲滑的體驗(yàn)感,是我們?cè)诮酉聛?lái)的優(yōu)化中要做的。

9. 奔潰

高性能的應(yīng)用不僅應(yīng)盡可能地避免奔潰,還應(yīng)該在奔潰發(fā)生時(shí)優(yōu)雅地恢復(fù),尤其是在進(jìn)行某個(gè)操作的過(guò)程中發(fā)生奔潰時(shí)。奔潰后的自我修復(fù)方案與熱更新方案可以幫到你。

10. 安全

安全對(duì)移動(dòng)應(yīng)用來(lái)說(shuō)是最重要的,因?yàn)槊舾行畔?huì)在應(yīng)用程序間共享,因此對(duì)通信數(shù)據(jù)與本地共享數(shù)據(jù)進(jìn)行加密就非常重要了。但是加密過(guò)程需要更多的計(jì)算會(huì)存儲(chǔ)空間,但是這與最大化運(yùn)行速度,最小化內(nèi)存使用的目標(biāo)相沖突。因此,我們需要在安全和其它因素之間進(jìn)行權(quán)衡。

為什么要寫性能優(yōu)化系列文章

優(yōu)化不要做的太早,性能是后來(lái)才會(huì)考慮的事情,從某種程度上來(lái)看,我認(rèn)同這種觀點(diǎn),畢竟最重要的是先完成功能需求。但是如果你在開(kāi)發(fā)初期就已經(jīng)有一套自己的優(yōu)化方案與思想,你在開(kāi)發(fā)過(guò)程中就可以使用最優(yōu)化的代碼與策略進(jìn)行開(kāi)發(fā),優(yōu)化與開(kāi)發(fā)同時(shí)進(jìn)行,開(kāi)發(fā)即優(yōu)化,我覺(jué)得這是一種很不錯(cuò)的方式,同時(shí)也會(huì)大大減輕后期優(yōu)化的工作量。

寫優(yōu)化系列的文章是想讓自己走的更深一點(diǎn),將自己理解的優(yōu)化方案拋出來(lái)供大家參考,這個(gè)過(guò)程中會(huì)出現(xiàn)各種不同優(yōu)化思想之間的碰撞,這才是最有趣的,既提升了自己,又方便了大家,何樂(lè)而不為~

性能優(yōu)化系列文章規(guī)劃

性能優(yōu)化系列文章,會(huì)從我們平常開(kāi)發(fā)的各個(gè)點(diǎn)出發(fā)給出優(yōu)化方案與建議,每個(gè)點(diǎn)都會(huì)最終落地成代碼,或者第三方工具,不做標(biāo)題黨,每個(gè)優(yōu)化方案都是本人經(jīng)過(guò)測(cè)試,對(duì)比,量化之后的成果,在這個(gè)過(guò)程中也希望可以收獲大家的一些優(yōu)化方案與思想,共同進(jìn)步。

關(guān)于更博的規(guī)劃,我目前的性能優(yōu)化篇博文目錄如下:

大概 12到 15篇文章,預(yù)計(jì)在7月中旬完成所有性能優(yōu)化更博計(jì)劃,中間會(huì)穿插一些其它非性能優(yōu)化篇的博文,希望各位看官能喜歡~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容