專案中如何優化細節

2021-10-09 17:42:44 字數 2126 閱讀 9764

一.記憶體優化

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萬條數需要十幾分鐘 這也太慢了 網頁都超時了。專案啟動時讀資料到專案中 不推薦 最開始想到的方法就是空間換時...