性能優化開篇綜述

爲何要作性能優化

首先引用一下 High performance iOS Apps 這本書中的一段統計數據:緩存

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

翻譯過來的意思就是:性能優化

  • 應用首次出錯後,79%的用戶只會再重試一兩次
  • 當應用啓動時間超過3秒時,25%的用戶會放棄使用該應用
  • 31%的用戶會將糟糕的體驗告知他人

從上面的數據統計能夠看出,App性能對於應用的重要性,App可否被用戶所承認不只僅取決於其功能,還取決於當與用戶交互時,應用可否提供流暢的體驗。網絡

從某一個角度來看,是由於你的APP是可替代的,咱們能夠從App Store找到大量的功能類似的替代品,爲何用戶在功能相同的狀況下會堅持使用你開發的這一款,兩個緣由:你的APP在功能上無可替代,或者是極少故障且性能格外出衆併發

App性能會受不少因素影響,這些因素包括內存消耗,網絡請求效率,用戶界面的流暢性,用戶操做的響應速度。因此咱們對性能的描述有一個量化的過程,咱們須要先概述不一樣類型的性能特徵,而後再對它們進行測量。app

性能的衡量標準是什麼

從用戶使用的角度來講

一個好的移動應用應該要具有如下三個特色ide

  • 可用性
  • 高性能
  • 穩定性

可用性衡量用戶如何與你的移動應用程序交互。若是他們沒法操做你的應用程序,如不少功能沒法使用,點擊界面無響應,滑動頁面時卡頓乃至奔潰,這些狀況,用戶很大可能會將你的APP從移動設別上刪除。工具

高性能,這個實際上是用戶感知最深的一塊,這裏包括幾個小的方面,如用戶界面響應效率,網絡請求效率,用戶交互體驗。性能

  • 用戶界面響應效率:根據 Dimensional Research 的調查,49%的用戶但願應用程序在2秒或更短的時間內作出響應,所以檢查應用程序的啓動和UI性能對於應用程序的成功相當重要。模擬不一樣類型的環境,以確認應用程序快速,順利地響應用戶的命令。
  • 網絡請求效率:若是應用程序在理想的網絡模擬中表現良好,那是很是棒的,但你的應用程序也須要在不太理想的環境中運行,在低帶寬,延遲高的不可靠網絡環境下,也須要有一套機制來保證數據的快速展現,這裏可使用緩存,也能夠併發請求提供提升響應效率。
  • 用戶交互體驗:若是用戶在滑動列表時感受到卡頓,點擊按鈕時無響應,打開某個頁面速度很慢,就會被用戶打上 Low performance的標籤,從而尋找同類型同功能體驗更佳的APP,這個實際上是性能優化的核心。

穩定性意味着它具備流暢,不間斷的體驗,不會出現錯誤消息或用戶崩潰。若是應用程序一直收到錯誤消息的彈窗提示或者永無止境的加載屏幕,若是用戶打開應用程序以前一直奔潰,若是用戶使用應用程序幾個小時以後發現電池是紅色的,絕大部分用戶會中止使用該應用程序。測試

從技術的角度來講

咱們能夠把性能量化成一個個可測量的性能指標,下面我將描述我對於性能量化的一些評判標準:

1. 內存

應用程序內存峯值取決與系統的硬件配置,佔用太高的內存會致使後臺應用被強制關閉,同時還要確保沒有內存泄漏,隨時間流逝持續增加的內存消耗意味着,應用程序可能會由於內存不足的異常而奔潰

2. 電量消耗

電量消耗過大通常狀況下會伴隨着設備發燙,電量消耗是一個涉及面很廣的場景,它不只僅與計算CPU週期有關,還包括高效地使用硬件。除了要實現電量消耗最小化,還要確保不會影響用戶體驗。

3. 初始化時間

應用在啓動時應執行恰好夠用的任務以完成初始化,從而知足用戶的使用需求。執行這些任務消耗的時間就是應用的初始化時間。啓動時間會直接影響用戶對應用程序的感官,秒開的APP通常意義上來講都是用戶喜歡的。

4. 執行速度

當觸發了某個操做,用戶老是但願它能夠儘快地工做。一切必要的處理都應該在儘量短的時間內完成。咱們經常使用的方式是使用空間換時間,儘量的快速響應用戶的操做。

5. 響應速度

每一個應用都應該快速地響應用戶交互。在應用中所作的一切優化和權衡最終都應該體如今響應速度上。

6. 本地存儲

用戶都但願可以在無網絡或者設備離線的狀況下還能夠瀏覽上次的內容,開發人員應該對本地存儲的使用有所規劃,以便應用具有離線瀏覽的能力。同時也須要提供一個清除物理存儲空間與內存緩存空間的選項,物理存儲空間佔用過多,會使用戶頻繁的卸載這些應用來回收本地存儲。內存消耗過多,也會致使應用被系統殺死,因此提供一個清理緩存的選項是頗有必要的。

7. 網絡請求

移動設備會在不一樣的網絡環境下使用,爲了確保可以提供最好的用戶體驗,你的應用應該適用於各類網絡條件。而網絡請求的響應速度會直接影響用戶體驗,如何作DNS優化,鏈接優化,弱網優化,是咱們在優化過程當中須要時刻關注的點。

8. 用戶界面流暢度

這個主要是咱們的列表視圖,FPS太低會給用戶一種卡頓感,這是一種很糟糕的體驗,優化咱們的TableView,提升渲染性能,給用戶絲滑的體驗感,是咱們在接下來的優化中要作的。

9. 奔潰

高性能的應用不只應儘量地避免奔潰,還應該在奔潰發生時優雅地恢復,尤爲是在進行某個操做的過程當中發生奔潰時。奔潰後的自我修復方案與熱更新方案能夠幫到你。

10. 安全

安全對移動應用來講是最重要的,由於敏感信息會在應用程序間共享,所以對通訊數據與本地共享數據進行加密就很是重要了。可是加密過程須要更多的計算會存儲空間,可是這與最大化運行速度,最小化內存使用的目標相沖突。所以,咱們須要在安全和其它因素之間進行權衡。

爲何要寫性能優化系列文章

優化不要作的太早,性能是後來纔會考慮的事情,從某種程度上來看,我認同這種觀點,畢竟最重要的是先完成功能需求。可是若是你在開發初期就已經有一套本身的優化方案與思想,你在開發過程當中就可使用最優化的代碼與策略進行開發,優化與開發同時進行,開發即優化,我以爲這是一種很不錯的方式,同時也會大大減輕後期優化的工做量。

寫優化系列的文章是想讓本身走的更深一點,將本身理解的優化方案拋出來供你們參考,這個過程當中會出現各類不一樣優化思想之間的碰撞,這纔是最有趣的,既提高了本身,又方便了你們,何樂而不爲~

性能優化系列文章規劃

性能優化系列文章,會從咱們日常開發的各個點出發給出優化方案與建議,每一個點都會最終落地成代碼,或者第三方工具,不作標題黨,每一個優化方案都是本人通過測試,對比,量化以後的成果,在這個過程當中也但願能夠收穫你們的一些優化方案與思想,共同進步。

關於更博的規劃,我目前的性能優化篇博文目錄以下:

大概 12到 15篇文章,預計在7月中旬完成全部性能優化更博計劃,中間會穿插一些其它非性能優化篇的博文,但願各位看官能喜歡~

相關文章
相關標籤/搜索