App瘦身、性能優化總結

App瘦身

資源瘦身

  • 使用tinypng壓縮PNG圖片。視頻能夠經過 Final cut等軟件進行分辨率壓縮。音頻則下降碼率便可。
  • 非必須資源文件能夠放到本身服務器上
  • 啓動圖使用 LaunchScreen.storyboard,啓動圖在一個項目資源中佔比其實蠻大的,可是使用 LaunchScreen.storyboard 只須要設置一張ImageView便可。
  • IconFont的使用很方便,項目中圖標太多或者隨時須要轉換圖標顏色的話,建議使用

放棄使用 Realm

Realm,聽說是目前是性能最好的移動端數據庫。可是在三方庫中能夠看到,Realm 的支持佔了很大的比重,大約在 8M 左右。可是若是使用 FMDB 話只須要192KB,而 CoreData 幾乎能夠忽略不計。數據庫

刪除重複代碼

重複代碼的審覈、無用的開源庫刪除緩存

性能優化

imageWithContentsOfFile 、 Assets.xcassets

  • 對於大的圖片且偶爾須要顯示的應放到工程目錄下,不要放到Assets.xcassets中;並使用imageWithContentsOfFile加載不讓系統緩存
  • 對於常常須要展現的小圖片放到Assets.xcassets中讓系統緩存,使用imageNamed加載

儘可能使用非逃逸閉包

非逃逸閉包是有利於內存優化的,因此儘可能使用非逃逸閉包性能優化

NSSet、NSArray

NSSet(用hash實現)和NSArray功能性質同樣,用於存儲對象,屬於集合。可是和NSArray不同的是它屬於 「無序集合」,在內存中存儲方式是不連續的,而NSArray是「有序集合」它內存中存儲位置是連續的。 因此在集合中尋找一個元素的時候使用NSSet,而若是須要循環集合中的全部對象來找到所須要的目標則使用NSArray服務器

頁面卡頓

屏幕顯示圖像的原理

  • CPU(中央處理器)

對象的建立和銷燬,對象屬性的調整、佈局計算、文本的計算和排版、圖片格式轉碼和解碼、圖像的繪製(Core Graphics閉包

  • GPU(圖形處理器)

紋理的渲染(OpenGL併發

  • FrameBuffer(幀緩存)

  • 一、CPU計算控件的位置、大小
  • 二、計算完成後CPU會將這些數據提交給GPU來進行渲染
  • 三、GPU將收到的數據轉成屏幕能顯示的數據格式,緩存到在FrameBuffer
  • 四、而後視頻控制器FrameBuffer讀取的數據顯示在顯示器

卡頓產生的緣由和解決方案

因爲垂直同步的機制,若是在一個 VSync 時間內,CPU 或者 GPU 沒有完成內容提交,則那一幀就會被丟棄,等待下一次機會再顯示,而這時顯示屏會保留以前的內容不變。這就是界面卡頓的緣由。異步

從上面的圖中能夠看到,CPU 和 GPU 不論哪一個阻礙了顯示流程,都會形成掉幀現象。因此開發時,也須要分別對 CPU 和 GPU 壓力進行評估和優化。佈局

卡頓優化-CPU

  • 一、儘可能用輕量級的對象,好比用不到事件處理的地方,能夠考慮使用CAlayer取代UIView
  • 二、不要頻繁地跳用UIVIew的相關屬性,好比frameboundstransform等屬性,儘可能減小沒必要要的修改
  • 三、儘可能提早計算好佈局,在有須要時一次性調整對應的佈局,不要屢次修改屬性
  • 四、Autolayout會比直接設置frame消耗更多的CPU資源
  • 五、圖片的size最好恰好跟UIImageViewsize保持一致
  • 六、控制一下線程的最大併發數量
  • 七、儘可能把耗時的操做放到子線程
  • 八、文本處理(尺寸的計算,繪製)
  • 九、圖片處理(解碼、繪製)

卡頓優化-GPU

  • 一、儘可能減小視圖數量和層次
  • 二、GPU能處理的最大紋理尺寸是4096x4096,一旦超過這個尺寸,就會佔用CPU資源進行處理,因此紋理儘可能不要超過這個尺寸
  • 三、儘可能避免短期內大量圖片的顯示,儘量將多張圖片合成一張圖片顯示
  • 四、減小透明的視圖(alpha<1),不透明的就設置opaque爲yes
  • 五、儘可能避免出現離屏渲染

離屏渲染

指的是在GPU在當前屏幕緩衝區之外開闢一個緩衝區進行渲染操做性能

致使產生離屏渲染的緣由:優化

  • shouldRasterize(光柵化)
  • shadows(陰影)
  • edge antialiasing(抗鋸齒)
  • group opacity(不透明)
  • 圓角(當和maskToBounds一塊兒使用時纔會觸發)
  • 漸變

可經過 Instruments 的 Core Animation 檢測離屏渲染。

TableView 調優

  • 提早計算好cell的高度,緩存在相應的數據源模型中,減小CPU的計算時間
  • 儘量的下降StoryboardXib等使用度
  • 異步繪製
  • 減小層級
  • Cell中的view儘量不要使用透明
  • 避免離屏渲染
相關文章
相關標籤/搜索