《高性能iOS 應(yīng)用開發(fā)》之影響移動應(yīng)用性能的因素

Effective Objective-C

先來看一組調(diào)研數(shù)據(jù)

  • 應(yīng)用首次啟動 出錯以后,79% 的用戶只會在重試一兩次
  • 當(dāng)應(yīng)用載入時間超過3秒時,25%的用戶放棄使用該應(yīng)用
  • 31%的用戶會將糟糕的體驗(yàn)告訴其他人

以上的調(diào)研數(shù)據(jù)都強(qiáng)調(diào)了性能對于應(yīng)用的重要性

性能會受到很多因素的影響,這些因素包括內(nèi)存消耗, 網(wǎng)絡(luò)寬帶效率以及用戶界面的相應(yīng)速度.我們先概述不同類型的性能特征,然后在對他們進(jìn)行測量

性能指標(biāo)是面向用戶的各個屬性,每種屬性可能是一個或多個測量工程參數(shù)的一個要素

一 影響性能的因素

1.1 內(nèi)存

內(nèi)存涉及運(yùn)行應(yīng)用所需的 RAM 最小值,以及應(yīng)用消耗的內(nèi)存平均值和峰值.最小內(nèi)存值會嚴(yán)重限制硬件,而最高的內(nèi)存平均值和峰值意味著更多的后臺應(yīng)用會被強(qiáng)制關(guān)閉
同時還用確保沒有內(nèi)存泄露, 隨時間流逝而持續(xù)增長的內(nèi)存消耗意味著,應(yīng)用很可能會因?yàn)閮?nèi)存不足的異常而崩潰

1.2 電量消耗

在編寫高性能 代碼時, 電量消耗是一個需要重點(diǎn)處理的重要因素, 就執(zhí)行時間和 CPU 資源的利用而言, 我們不僅要實(shí)現(xiàn)高效的數(shù)據(jù)結(jié)構(gòu)和算法, 還需要考慮其他的因素,如果某個應(yīng)用是個電池黑洞,那么一定不會有人喜歡他
電量消耗不僅僅與計(jì)算 CPU 周期有關(guān),還包括高效的使用硬件, 除了要實(shí)現(xiàn)電量消耗最小化, 還要確保不會影響用戶體驗(yàn)

1.3 初始化時間

應(yīng)用在啟動時應(yīng)執(zhí)行剛好夠用的任務(wù)以完成初始化, 從而滿足用戶的使用需求,執(zhí)行這些消耗的時間就是應(yīng)用的初始化時間, "搞好夠用"是一個開放式用語------正確的平衡點(diǎn)取決于應(yīng)用的需要

在首次使用應(yīng)用時 創(chuàng)建對象并進(jìn)行初始化是一個合理的選擇, 例如:直到需要使用對象時,才創(chuàng)建對象, 這種方式叫做惰性初始化,
下面列舉了 你可能想在應(yīng)用初始化階段執(zhí)行的一些動作

  • 檢查應(yīng)用是否是首次啟動
  • 檢查用戶是否已經(jīng)登錄
  • 如果用戶已經(jīng)登錄, 盡可能地載入之前的狀態(tài)
  • 連接服務(wù)器以拉取最新的變更
  • 檢查應(yīng)用是否由某個深層鏈接喚起.如果是,還需要載入深層鏈接相應(yīng)的 UI 和狀態(tài)
  • 檢查是否存在應(yīng)用上次啟動時 掛起的任務(wù),需要時恢復(fù)他們
  • 初始化后續(xù)需要使用的對象和線程池
  • 初始化依賴項(xiàng)(如對象關(guān)系映射, 崩潰報(bào)告和緩存)
1.4 執(zhí)行速度

一旦啟動應(yīng)用, 用戶總是希望他可以盡可能快的工作,一切必要的處理都應(yīng)該在盡可能短的時間內(nèi)完成
例如 在照片應(yīng)用中, 用戶通常希望看到調(diào)整高度或?qū)Ρ榷鹊群唵涡Ч膶?shí)時預(yù)覽效果 因此相應(yīng)的處理需要在幾毫秒內(nèi)完成

1.5 相應(yīng)速度

每個應(yīng)用都應(yīng)該快速的相應(yīng)用戶交互, 在應(yīng)用中所做的一切優(yōu)化和權(quán)衡最終都體現(xiàn)在相應(yīng)速度上
App Store中有需要應(yīng)用可以完成相似或者相關(guān)的任務(wù), 這位用戶提供了很大的選擇空間,而用戶基本都會選擇相應(yīng)最快的應(yīng)用

1.6 本地存儲

針對任何在服務(wù)器上存儲數(shù)據(jù)或通過外部來源刷新數(shù)據(jù)的應(yīng)用,開發(fā)人員應(yīng)該對本地存儲的使用有所規(guī)劃.以便應(yīng)用具備離線瀏覽的能力
如果你的應(yīng)用使用了本地存儲,那么請?zhí)峁┮粋€清楚數(shù)據(jù)的選項(xiàng),遺憾的是,市場上的大部分應(yīng)用都沒有提供此選項(xiàng),更讓人煩惱的是,一些應(yīng)用竟然會消耗數(shù)百兆的存儲空間,用戶會頻繁的卸載這些應(yīng)用來回收本地存儲, 這回導(dǎo)致糟糕的用戶體驗(yàn),從而威脅應(yīng)用的成功
一定要向終端用戶提供清空本地緩存的選項(xiàng)
此處打廣告 本人已經(jīng)基于 FMDB 二次封裝了一個 LLFMDB 拿來及用 簡單容易上手 可參考Demo

1.7 互操作性

這個知識點(diǎn)就比較懵懂了 待后續(xù)書中好好研究分析
用戶可能會使用對個應(yīng)用來完成某個任務(wù), 這就需要這些應(yīng)用直接提供互操作的能力, 如一個相冊可能需要一個幻燈片應(yīng)用來實(shí)現(xiàn)最佳的瀏覽效果,但需要另一個應(yīng)用來編輯照片, 其中瀏覽照片的應(yīng)用要能夠?qū)⒄掌l(fā)送到編輯器,并接收編輯后的圖片

IOS 為實(shí)現(xiàn)應(yīng)用間的互操作和數(shù)據(jù)共享提供了多種機(jī)制,其中包括
UIActivityViewController,深層鏈接, MulipeerConnetivity框架,等等
為深層鏈接定義良好的 URL 結(jié)構(gòu)與編寫優(yōu)異的代碼來解析 URL 同樣重要,類似的使用共享對話框共享數(shù)據(jù)時,精確識別用于分享的數(shù)據(jù)非常重要,同時在處理不同數(shù)據(jù)源傳入的數(shù)據(jù)時還有注意安全隱患

1.8 網(wǎng)絡(luò)環(huán)境

移動設(shè)備會在不同網(wǎng)絡(luò)環(huán)境下使用, 為了確保能夠提供最好的用戶體驗(yàn),你的應(yīng)用應(yīng)當(dāng)適應(yīng)各種網(wǎng)絡(luò)條件

  • 高寬帶穩(wěn)定網(wǎng)絡(luò)
  • 低寬帶穩(wěn)定網(wǎng)絡(luò)
  • 高寬帶不穩(wěn)定網(wǎng)絡(luò)
  • 高寬帶不穩(wěn)定網(wǎng)絡(luò)
    為用戶提供進(jìn)度指示或錯誤信息是相對合理的方式, 無盡的等待或崩潰則讓人無法忍受
    如圖因網(wǎng)絡(luò)差或數(shù)據(jù)量大而顯示的不同提示信息
因網(wǎng)絡(luò)差或數(shù)據(jù)量大而顯示的不同提示信息
1.9 寬帶

人們會在不同的網(wǎng)絡(luò)條件下使用自己的移動設(shè)備,網(wǎng)速從每秒數(shù)千字節(jié)到每秒數(shù)十兆字節(jié)
因此寬帶的優(yōu)化使用是定義應(yīng)用質(zhì)量的另一個關(guān)鍵參數(shù), 此外在高寬帶網(wǎng)絡(luò)下運(yùn)行一個基于低寬帶網(wǎng)絡(luò)開發(fā)的應(yīng)用可能產(chǎn)生完全不同的結(jié)果

1.10 數(shù)據(jù)刷新

即使沒有提供離線瀏覽能力,你仍可以從服務(wù)器端周期性的刷新數(shù)據(jù),刷新的頻率和每次傳輸?shù)臄?shù)據(jù)量將決定數(shù)據(jù)傳輸?shù)目偭?如果傳輸?shù)淖止?jié)數(shù)過大, 那用戶必然會快速耗盡自己的流量計(jì)劃, 當(dāng)流量消耗大到一定程度時, 你的應(yīng)用很可能會流失用戶
從 IOS7 開始應(yīng)用可以在后臺周期性的刷新數(shù)據(jù), 對于及時聊天應(yīng)用,持久的 HTTP 鏈接或原聲 TCP 鏈接可能會非常有用

1.11 多用戶登錄

是否支持多個并發(fā)用戶取決于產(chǎn)品的需要, 一旦決定提供此功能,請參考以下準(zhǔn)則: ① 添加新用戶應(yīng)盡可能高效② 在不同用戶之間更新應(yīng)盡可能高效③在不同用戶之間切換應(yīng)盡可能高效④用戶數(shù)據(jù)的界限應(yīng)該簡潔且沒有 bug

1.12 單點(diǎn)登錄

如果你已經(jīng)創(chuàng)建了多個允許或需要登錄的應(yīng)用, 那么支持單點(diǎn)登錄就是一個很多的選擇, 如果用戶登錄了一個應(yīng)用, 只需要點(diǎn)一次,就可以登錄到其他的應(yīng)用中
其實(shí)這一點(diǎn)就需要基于大公司背景了就像微信 QQ 微博第三方登錄一樣

1.13 安全

安全對移動應(yīng)用來說是最重要的, 因?yàn)槊舾行畔⒖赡軙趹?yīng)用之間共享,因此 對所有通信以及本地?cái)?shù)據(jù)和共享數(shù)據(jù)進(jìn)行加密就顯得尤為重要了
但是引入多個安全層又會影響性能, 并對用戶體驗(yàn)造成可感知的負(fù)面影響.如何設(shè)定安全的基線需要參考對用戶群體的統(tǒng)計(jì)分析.此外,硬件在其中扮演了重要的角色,選擇會因?yàn)椴煌O(shè)備的計(jì)算能力而有所不同

1.14 崩潰

高性能的應(yīng)用不僅應(yīng)盡可能的避免崩潰.還應(yīng)該在崩潰發(fā)生時優(yōu)雅的恢復(fù), 尤其是在進(jìn)行某個操作的過程中發(fā)生崩潰時

以上即是影響 app 性能的各大因素,
后續(xù)會繼續(xù)總結(jié)書中如何去優(yōu)化這些影響性能的因素

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

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

  • 打算把《高性能iOS開發(fā)》這本書公開出來,供大家學(xué)習(xí)。這是第一章,感興趣的可以訂閱我的專題 高性能iOS應(yīng)用開發(fā)。...
    張芳濤閱讀 2,410評論 9 24
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 今天說說最喜歡的一本書,這本書是開啟我暴走之旅的鑰匙 《一個人的朝圣》 這本書是2015年春節(jié)支援時,在咖啡陪你看...
    Panda盼子閱讀 314評論 1 0
  • 作為一名醫(yī)生,作為一名3歲小男孩的麻麻,你們懂了,狗都嫌的男孩(真的,我家貝貝都嫌他)的麻麻,真的是精力有限,有時...
    宇寶寶媽閱讀 501評論 0 0

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