《高效能iOS應用開發》打造使用者稀飯的App

阿狸不歌發表於2017-08-01

《高效能iOS應用開發》封面

  • 當應用首次工作出錯以後,79% 的使用者只會再重試一兩次 —— 你還有挽救的機會!
  • 當應用載入時間超過 3 秒時,25%的使用者會放棄使用該應用 —— 就算你的App再漂亮,啟動慢了也不行!
  • 31% 的使用者會將糟糕的體驗轉告他人 —— 不只是AppStore上的差評喲!

如果你想躋身於頂尖ios開發人員之列,那麼上面幾個統計資料你得注意了⚠️ —— 你的App能否被使用者認可不僅僅取決於功能,還取決於當與使用者互動時,應用能否提供流暢的體驗(也就是效能)。在AppStore上尋找某一類應用,無論是電商、遊戲、社交還是旅遊和天氣,大部分你都能找到不只一個款,這意味著你的App體驗不好,使用者自然可以選別的 —— 就算你絞盡腦汁搞出一款“獨一無二”的應用,如果App效能不好,人家也不會用你的。

上述種種問題是如何導致的?可能不僅僅是程式的Bug那麼簡單,因素可能多種多樣,本書第一部分在開篇為我們指出了十四個大的方向——記憶體、電量消耗、初始化時間、執行速度、響應速度、記憶體本地儲存、互操作性、網路環境、頻寬、資料重新整理、多使用者支援、單點登入、安全、崩潰。同時也指出了效能分析的兩種主要方式——取樣和埋點。


解決問題要抓主要矛盾,所以第二部分討論了影響我們App效能最主要的三大塊:記憶體管理、能耗以及併發。

為什麼記憶體要放在第一位?我們在開發桌面乃至瀏覽器程式的時候,一般來說並不會優先考慮記憶體的問題,因為現在桌上型電腦或者膝上型電腦的記憶體還是挺夠用的,更不用說跑在伺服器上的服務端程式了。但是對於手機(iPhone)和平板(iPad)而言,記憶體資源目前確實是非常有限的,所以iOS實際上是設定了單個程式的記憶體使用上限,根據蘋果公司的資料,90%的App因為不當的記憶體管理而崩潰。顯然,根據二八原則,我們要把記憶體這個主要矛盾處理好。首先我們要了解記憶體耗在了什麼地方?記憶體消耗分為兩部分:棧大小和堆大小。關於什麼是堆和棧,任何一本與資料結構相關的書都不會放過它們,此處不再贅述。棧大小受制於如下幾個因素:(1)可被遞迴呼叫的最大方法數、(2)一個方法中最多可以使用的變數個數、(3)檢視層級中可以嵌入的最大檢視深度。前兩點對於效能的影響,自己寫個通過遞迴實現的計算斐波那契數列的函式就可以體會到,第三點則實際上是前兩點的衍生品——檢視層級一多,遞迴的數量以及變數自然就多。第二章用一系列程式碼例子解釋了iOS的記憶體管理模型,並深入細節的告訴我們該如何“自動”的釋放記憶體、釋放池塊、引用計數等等。通過這些程式碼,我們可以學會跟蹤記憶體使用情況、避免發生迴圈引用,從而達到減少記憶體的消耗、降低平均和峰值記憶體,最終避免我們的程式走向崩潰。

目前對於移動裝置或者移動應用而言,最大的制約之一就是能耗,大家都關心手機充一次電能用多久,如果用了你的App發現電吊得特別快,那麼你的App就有可能被使用者忍痛割愛!能耗的原因是什麼,雖然網路硬體、藍芽、GPS、麥克風、加速計、攝像頭、揚聲器和螢幕都是產生能耗的硬體,但是大頭其實是CPU,或者再直接點說,取決於你讓CPU做了多少的計算——計算越多,耗電就越快。在減少計算量上是沒有銀彈的,只有根據具體情況採取具體的措施,比如排序演算法,列表少於 43 個例項,則插入排序優於歸併排序,當例項多於 286 個時,則應使用快速排序。還有些方法,就是把計算挪個地方,比如客戶端和服務端都可以做的計算,我們可以放在服務端去算。再比如,可以採用優化靜態編譯(ahead-of-time,AOT)處理……總之,要麼我們在硬體上想些辦法——例如當應用進入後臺時,釋放部分硬體的鎖定,比如:藍芽、相機、揚聲器、麥克風;要麼就在如何讓CPU算得更少上面做文章。當然,也可以在使用者體驗上做些文章,比如讓App在適當的時機提示使用者電量的問題,會讓使用者感覺良好,並因此欣賞你的App。

要想把蘋果裝置的(多核)效能發揮出來,併發程式設計是少不了的。如何建立和管理執行緒、如何對多執行緒進行優化、更重要的是如何寫好執行緒安全的程式碼……本章介紹了一些原則性的建議,並給出了程式碼示例。當然,如何寫好併發程式設計實際上是一個大課題,幸好圖靈有一本《Objective-C高階程式設計: iOS與OS X多執行緒和記憶體管理》可以讓我們深入的學習和了解iOS併發程式設計。 Objective-C高階程式設計


本書第三部涉獵的內容比較多方多面,第5章介紹應用的生命週期、第6章介紹使用者介面,我們可以結合《iOS使用者體驗設計》來學習,充分發掘iOS功能,從而打造出高品質的移動應用。 iOS使用者體驗設計

第7章著眼於提高網路效能,我們可以結合《iOS網路程式設計與雲端應用最佳實踐》來學習和實踐。 iOS網路程式設計與雲端應用最佳實踐

關於安全方面,圖靈則有一本黑客攻防系列的《黑客攻防技術寶典:iOS實戰篇黑客攻防技術寶典:iOS實戰篇


第四部分名曰“程式碼之外”,自然不是教我們如何coding,而是涵蓋了應用測試、工具,以及在自然環境下監控應用。如何利用好獲得的資料及應用產生的埋點資料來跟蹤效能並完善下一個釋出版本對於快速迭代App來說非常重要。本部分著眼於測試、釋出,介紹分析特定任務時所需要的特定的工具,以及埋點和資料分析。應該說市面上專門介紹這一部分(程式碼之外)的書並不多見。


關於iOS開發的書市面上是汗牛充棟,光圖靈就出了幾十本,不管是入門還是提高,照著書寫個iOS App並不是難事,但是專門從提高App效能的角度出發,著眼於如何從程式設計的角度出發提高App的終端使用者體驗,本書是目前市面上獨一無二的。

相關文章