本文只描述一些對于項目APP優化的一些心得總結, 對于理論不做過多贅述, 有想具體了解整個啟動過程的可以在文章尾部參考提供的文章鏈接
查看APP啟動用時
Xcode -> Product -> Scheme -> Edit Scheme
添加環境變量 DYLD_PRINT_STATISTICS 設置為1 可在運行APP時后臺查看啟動相關日志
對于APP啟動優化的總結
- 將+load處理的非必要轉移至+initialize處理
- 檢查核對framework的引用, 如果未引用的取消引用, 如果有必要的引用可以檢查是否可更新為靜態庫的引用
- 對于程序中的靜態變量進行檢查, 對于未用到的進行清理
- 刪除無用的對于.h文件的引用(開發過程中經常對一些.h文件引用過后卻未使用), 盡量將對于文件的引用在.m文件用導入, .h文件可以使用前向聲明@class進行標識
- 避免使用C++虛函數
- 使用APPCode的Inspect Code功能, 檢查項目中Unused Class/Property/Method.., 刪除減少項目體積
- 對于啟動創建的所有相關視圖, 避免使用xib加載, 盡量使用代碼創建展示
- 檢查NSLog使用, NSLog會隱式調用創建Calendar(calendar相關操作支出很大)
- 對于項目啟動初的網絡請求/統計相關等, 檢查是否放置在異步線程處理, 對于主頁數據緩存, 盡快展示主視圖
- 一些復雜頁面可以使用AsyncDisplayKit, 一個異步線程安全繪制UI的庫, 性能可以得到大量提升
對于相關理論有想具體了解的同學可以參考這篇文章:
http://yulingtianxia.com/blog/2016/10/30/Optimizing-App-Startup-Time/
更新于2018.1.13 新增優化方式 (參考網上其他開發者總結)
一、首頁啟動速度
啟動過程中做的事情越少越好(盡可能將多個接口合并)
不在UI線程上作耗時的操作(數據的處理在子線程進行,處理完通知主線程刷新節目)
在合適的時機開始后臺任務(例如在用戶指引節目就可以開始準備加載的數據)
盡量減小包的大小
優化方法:
量化啟動時間
啟動速度模塊化
輔助工具(友盟,聽云,Flurry)
二、頁面瀏覽速度
json的處理(iOS 自帶的NSJSONSerialization,Jsonkit,SBJson)
數據的分頁(后端數據多的話,就要分頁返回,例如網易新聞,或者 微博記錄)
數據壓縮(大數據也可以壓縮返回,減少流量,加快反應速度)
內容緩存(例如網易新聞的最新新聞列表都是要緩存到本地,從本地加載,可以緩存到內存,或者數據庫,根據情況而定)
延時加載tab(比如app有5個tab,可以先加載第一個要顯示的tab,其他的在顯示時候加載,按需加載)
算法的優化(核心算法的優化,例如有些app 有個 聯系人姓名用漢語拼音的首字母排序)
三、操作流暢度優化:
Tableview 優化(tableview cell的加載優化)
ViewController加載優化(不同view之間的跳轉,可以提前準備好數據)
四、數據庫的優化:
數據庫設計上面的重構
查詢語句的優化
分庫分表(數據太多的時候,可以分不同的表或者庫)
五、服務器端和客戶端的交互優化:
客戶端盡量減少請求
服務端盡量做多的邏輯處理
服務器端和客戶端采取推拉結合的方式(可以利用一些同步機制)
通信協議的優化。(減少報文的大小)
電量使用優化(盡量不要使用后臺運行)
六、非技術性能優化
產品設計的邏輯性(產品的設計一定要符合邏輯,或者邏輯盡量簡單,否則會讓程序員抓狂,有時候用了好大力氣,才可以完成一個小小的邏輯設計問題)
界面交互的規范(每個模塊的界面的交互盡量統一,符合操作習慣)