一.記憶體優化
1.減少記憶體洩露。如timer,delegate,block,corefoundation物件(c物件),image
2.降低記憶體使用峰值。如使用懶載入
二.效能優化
卡頓產生的原因:
cpu計算時間以及gpu渲染時間較長,造成vsync(垂直同步的訊號)重新整理銜接不上
解決卡頓主要思路:
盡可能減少cpu、gpu的資源消耗
優化方法(cpu方面):
1.盡量使用輕量級的物件,如果用不到事件處理的地方,我們就使用calayer來取代uiview
2.不要頻繁的調整和呼叫uiview相關屬性,frame、bounds、transform等
3.盡量提前計算好布局
4.autolayout的布局比frame消耗更多cpu資源
5.的size和uiimageview的size最好一致,因為cpu會去計算和伸縮這個
6.控制線程的併發數量,把耗時的操作放到子執行緒,比如:
①文字計算,計算寬度和高度
②在顯示之前進行解碼和繪製(預設是在主線程)
優化方法(gpu方面):
1.儘量減少檢視數量和層次,渲染次數就減少
2.盡量避免短時間內大量的顯示,可以根據需求將多張 合成一張顯示
3.減少透明的檢視
4.減少離屏渲染,例如:
遮罩layer.mask
圓角layer.cornerradius
陰影layer.shadow
這三個操作會觸發離屏渲染
instrument如何檢測卡頓?
使用coreanimation來檢視程式顯示卡效能以及cpu使用情況
使用timeprofiler檢視系統耗時
1.cpu處理(大量事件處理)
2.聯網狀態(大量的網路互動)
3.定位(持續使用定位)
4.影象(處理、渲染)
優化方法:
1.盡可能降低 cpu和gup的消耗
①少用定時器
②減少檔案讀寫(藍芽傳輸檔案),如果資料量比較大就使用sqllite、coredata
2.減少和壓縮網路資料
①壓縮、xml檔案壓縮
②如果多次請求的返回資料相同的,就使用快取
③盡量使用斷點續傳,減少請求資料的互動
④網路情況不好或者不可用時,不要執行網路請求
3.定位優化
①如果是定位使用者位置,使用corelocationmanager的requestlocation方法,定位完成後就停止定位裝置的供電
②如果不是導航應用盡量不要實時更新位置,定位完畢就關掉定位服務
③如果不是必須,就降低定位精準度
四.安裝包**
2.去除無用資源,網上有開源的檢測外掛程式
3.可執行檔案**,檢測未使用的**,網上有開源的檢測外掛程式
4.使用外掛程式檢查linkmaps,可以檢測出具體的檔案大小,這樣可以針對檔案的大小進行檔案內容優化
五、啟動時間優化啟動過程
2、載入動態庫(包括所依賴的所有動態庫)
3、rebase
4、bind
5、初始化objectivec runtime
6、其它的初始化**
main函式之後
1、能延遲執行的就延遲執行。比如sdk的初始化,介面(uiviewcontroller)的建立。
2、不能延遲執行的,盡量放到後台執行。比如資料讀取,原始json資料轉物件,日誌傳送。
main函式之前
1、合併動態庫,比如公司內部由私有pod建立了如下動態庫:xxtableview, xxhud, xxlabel,強烈建議合併成乙個xxuikit來提高載入速度。
2、合併category和功能類似的類。比如:uiview+frame,uiview+autolayout…合併為乙個
3、刪除無用的方法和類。
4、+load() 方法裡的內容可以放到首屏渲染完成後再執行,或使用 +initialize() 方法替換掉。因為,在乙個 +load() 方法裡,進行執行時方法替換操作會帶來 4 毫秒的消耗。不要小看這 4 毫秒,積少成多,執行 +load() 方法對啟動速度的影響會越來越大。
5、控制 c++ 全域性變數的數量。
六、專案中解決的難點(直播彈幕方面)執行緒安全、ui輕量化、彈幕集中化(某時間段大量彈幕)。
專案中的效能優化
在實際專案中,由於需要把介面返回來的物件存在資料庫中,所以用到了jackson元件把物件轉成json後再保持到資料庫中。由於每天處理的資料量太大,而業務對時間的要求非常嚴格,即使採用4臺機器做分布式後,計算時間仍然在2 3個小時,於是效能優化提上了日程。用jprofiler工具觀察到效能主要在兩個地...
Spark SQL專案中的優化思路
儲存格式的選擇 採取行式還是列式儲存?列儲存寫入時次數多,損耗時間多 反過來查詢的時候較快 壓縮格式的選擇 考慮壓縮速度和壓縮檔案的分割性 壓縮能夠較少儲存空間 提高資料傳輸速度 的優化 選擇的高效能的運算元 foreachpartition partitionofrecords.foreach 獲...
專案中優化查詢速度案例
近期在專案中遇到的問題在本文記錄一下。首先業務內容是通過ip去mysql中查詢相應資訊,批量匯入ip進行查詢。庫中的資料量大約為553萬條。一開始用遍歷單條查詢的方式查詢資料非常慢,查詢1.7萬條數需要十幾分鐘 這也太慢了 網頁都超時了。專案啟動時讀資料到專案中 不推薦 最開始想到的方法就是空間換時...