App瘦身壹无、性能優(yōu)化總結(jié)

App瘦身

資源瘦身

  • 使用tinypng壓縮PNG圖片。視頻可以通過 Final cut等軟件進(jìn)行分辨率壓縮感帅。音頻則降低碼率即可斗锭。
  • 非必須資源文件可以放到自己服務(wù)器上
  • 啟動(dòng)圖使用 LaunchScreen.storyboard,啟動(dòng)圖在一個(gè)項(xiàng)目資源中占比其實(shí)蠻大的失球,但是使用 LaunchScreen.storyboard 只需要設(shè)置一張ImageView即可岖是。
  • IconFont的使用很方便,項(xiàng)目中圖標(biāo)太多或者隨時(shí)需要轉(zhuǎn)換圖標(biāo)顏色的話实苞,建議使用

放棄使用 Realm

Realm豺撑,據(jù)說是目前是性能最好的移動(dòng)端數(shù)據(jù)庫。但是在三方庫中可以看到黔牵,Realm 的支持占了很大的比重聪轿,大約在 8M 左右。但是如果使用 FMDB 話只需要192KB猾浦,而 CoreData 幾乎可以忽略不計(jì)陆错。

刪除重復(fù)代碼

重復(fù)代碼的審核灯抛、無用的開源庫刪除

性能優(yōu)化

imageWithContentsOfFile 、 Assets.xcassets

  • 對于大的圖片且偶爾需要顯示的應(yīng)放到工程目錄下音瓷,不要放到Assets.xcassets中对嚼;并使用imageWithContentsOfFile加載不讓系統(tǒng)緩存
  • 對于經(jīng)常需要展示的小圖片放到Assets.xcassets中讓系統(tǒng)緩存,使用imageNamed加載

盡量使用非逃逸閉包

非逃逸閉包是有利于內(nèi)存優(yōu)化的绳慎,所以盡量使用非逃逸閉包

NSSet纵竖、NSArray

NSSet(用hash實(shí)現(xiàn))和NSArray功能性質(zhì)一樣,用于存儲(chǔ)對象偷线,屬于集合磨确。但是和NSArray不一樣的是它屬于 “無序集合”沽甥,在內(nèi)存中存儲(chǔ)方式是不連續(xù)的声邦,而NSArray是“有序集合”它內(nèi)存中存儲(chǔ)位置是連續(xù)的。
所以在集合中尋找一個(gè)元素的時(shí)候使用NSSet摆舟,而如果需要循環(huán)集合中的所有對象來找到所需要的目標(biāo)則使用NSArray

頁面卡頓

屏幕顯示圖像的原理

  • CPU(中央處理器)

對象的創(chuàng)建和銷毀亥曹,對象屬性的調(diào)整、布局計(jì)算恨诱、文本的計(jì)算和排版媳瞪、圖片格式轉(zhuǎn)碼和解碼、圖像的繪制(Core Graphics

  • GPU(圖形處理器)

紋理的渲染(OpenGL

  • FrameBuffer(幀緩存)
image
  • 1照宝、CPU計(jì)算控件的位置蛇受、大小
  • 2、計(jì)算完成后CPU會(huì)將這些數(shù)據(jù)提交給GPU來進(jìn)行渲染
  • 3厕鹃、GPU將收到的數(shù)據(jù)轉(zhuǎn)成屏幕能顯示的數(shù)據(jù)格式兢仰,緩存到在FrameBuffer
  • 4、然后視頻控制器FrameBuffer讀取的數(shù)據(jù)顯示在顯示器

卡頓產(chǎn)生的原因和解決方案

image

由于垂直同步的機(jī)制剂碴,如果在一個(gè) VSync 時(shí)間內(nèi)把将,CPU 或者 GPU 沒有完成內(nèi)容提交,則那一幀就會(huì)被丟棄忆矛,等待下一次機(jī)會(huì)再顯示察蹲,而這時(shí)顯示屏?xí)A糁暗膬?nèi)容不變。這就是界面卡頓的原因催训。

從上面的圖中可以看到洽议,CPU 和 GPU 不論哪個(gè)阻礙了顯示流程,都會(huì)造成掉幀現(xiàn)象漫拭。所以開發(fā)時(shí)亚兄,也需要分別對 CPU 和 GPU 壓力進(jìn)行評(píng)估和優(yōu)化。

卡頓優(yōu)化-CPU

  • 1嫂侍、盡量用輕量級(jí)的對象儿捧,比如用不到事件處理的地方荚坞,可以考慮使用CAlayer取代UIView
  • 2、不要頻繁地跳用UIVIew的相關(guān)屬性菲盾,比如frame颓影、boundstransform等屬性懒鉴,盡量減少不必要的修改
  • 3诡挂、盡量提前計(jì)算好布局,在有需要時(shí)一次性調(diào)整對應(yīng)的布局临谱,不要多次修改屬性
  • 4璃俗、Autolayout會(huì)比直接設(shè)置frame消耗更多的CPU資源
  • 5、圖片的size最好剛好跟UIImageViewsize保持一致
  • 6悉默、控制一下線程的最大并發(fā)數(shù)量
  • 7城豁、盡量把耗時(shí)的操作放到子線程
  • 8、文本處理(尺寸的計(jì)算抄课,繪制)
  • 9唱星、圖片處理(解碼、繪制)

卡頓優(yōu)化-GPU

  • 1跟磨、盡量減少視圖數(shù)量和層次
  • 2间聊、GPU能處理的最大紋理尺寸是4096x4096,一旦超過這個(gè)尺寸抵拘,就會(huì)占用CPU資源進(jìn)行處理哎榴,所以紋理盡量不要超過這個(gè)尺寸
  • 3、盡量避免短時(shí)間內(nèi)大量圖片的顯示僵蛛,盡可能將多張圖片合成一張圖片顯示
  • 4尚蝌、減少透明的視圖(alpha<1),不透明的就設(shè)置opaque為yes
  • 5墩瞳、盡量避免出現(xiàn)離屏渲染

離屏渲染

指的是在GPU在當(dāng)前屏幕緩沖區(qū)以外開辟一個(gè)緩沖區(qū)進(jìn)行渲染操作

導(dǎo)致產(chǎn)生離屏渲染的原因:

  • shouldRasterize(光柵化)
  • shadows(陰影)
  • edge antialiasing(抗鋸齒)
  • group opacity(不透明)
  • 圓角(當(dāng)和maskToBounds一起使用時(shí)才會(huì)觸發(fā))
  • 漸變

可通過 Instruments 的 Core Animation 檢測離屏渲染驼壶。

TableView 調(diào)優(yōu)

  • 提前計(jì)算好cell的高度,緩存在相應(yīng)的數(shù)據(jù)源模型中,減少CPU的計(jì)算時(shí)間
  • 盡可能的降低Storyboard喉酌、Xib等使用度
  • 異步繪制
  • 減少層級(jí)
  • Cell中的view盡可能不要使用透明
  • 避免離屏渲染
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末热凹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子泪电,更是在濱河造成了極大的恐慌般妙,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件相速,死亡現(xiàn)場離奇詭異碟渺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)突诬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門苫拍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芜繁,“玉大人,你說我怎么就攤上這事绒极】チ睿” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵垄提,是天一觀的道長榔袋。 經(jīng)常有香客問我,道長铡俐,這世上最難降的妖魔是什么凰兑? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮审丘,結(jié)果婚禮上吏够,老公的妹妹穿的比我還像新娘。我一直安慰自己备恤,他們只是感情好稿饰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著露泊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旅择。 梳的紋絲不亂的頭發(fā)上惭笑,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音生真,去河邊找鬼沉噩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柱蟀,可吹牛的內(nèi)容都是我干的川蒙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼长已,長吁一口氣:“原來是場噩夢啊……” “哼畜眨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起术瓮,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對情侶失蹤康聂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刀诬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年汹忠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诉植。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓢喉。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戚绕,死狀恐怖鉴逞,靈堂內(nèi)的尸體忽然破棺而出约巷,到底是詐尸還是另有隱情尝蠕,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布载庭,位于F島的核電站看彼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏囚聚。R本人自食惡果不足惜靖榕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顽铸。 院中可真熱鬧茁计,春花似錦、人聲如沸谓松。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鬼譬。三九已至娜膘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間优质,已是汗流浹背竣贪。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巩螃,地道東北人演怎。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像避乏,于是被迫代替她去往敵國和親爷耀。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容