APP 優(yōu)化

CPU-中央處理器

對(duì)象的創(chuàng)建和銷毀肖揣,對(duì)象屬性的調(diào)整,布局計(jì)算可免,文本的計(jì)算和排版抓于,圖片的格式轉(zhuǎn)換和解碼,圖像的繪制

GPU-圖形處理器

紋理的渲染浇借,最大紋理尺寸是4096x4096

CPU——計(jì)算——GPU——渲染——幀緩存——讀取——視頻控制器——顯示——屏幕

IOS是雙緩存機(jī)制捉撮,前幀緩存,后幀緩存

按照60FPS的刷幀率妇垢,每隔16ms就會(huì)有一次VSync信號(hào)


卡頓解決的主要思路:

盡可能減少CPU巾遭,GPU資源消耗


CPU的優(yōu)化:

1.盡量用輕量級(jí)的對(duì)象,比如用不到事件處理的地方闯估,可以考慮使用CALayer取代UIView

2.不要頻繁的調(diào)用UIView的相關(guān)屬性灼舍,比如frame,bounds,transform等屬性,盡量減少不必要的修改

3.盡量提前計(jì)算好布局

4.Autolayout會(huì)比直接設(shè)置frame消耗更多的CUP資源

5.圖片的size最好剛好跟UIImageView的size保持一致

6.控制線程的最大并發(fā)數(shù)量

7.盡量把耗時(shí)的操作放到子線程

? ? 文本處理(尺寸計(jì)算涨薪,繪制)圖片處理(解碼骑素,繪制)

GPU優(yōu)化

1.盡量避免短時(shí)間內(nèi)大量圖片的顯示,盡可能將多張圖片合成一張進(jìn)行顯示

2.盡量較少視圖數(shù)量和層次

3.減少透明的視圖刚夺,不透明的就設(shè)置opaque為YES

4.盡量避免出現(xiàn)離屏渲染


耗電優(yōu)化:

1.少用定時(shí)器

2.優(yōu)化I/O操作

3.數(shù)據(jù)量大的盡量使用數(shù)據(jù)庫

4.減少献丑,壓縮網(wǎng)絡(luò)數(shù)據(jù)

5.緩存

6.斷點(diǎn)續(xù)傳


APP啟動(dòng)優(yōu)化,主要針對(duì)冷啟動(dòng)進(jìn)行優(yōu)化

1.通過添加環(huán)境變量可以打印出APP的啟動(dòng)時(shí)間分析(Edit scheme -> Run -> Arguments)

DYLD_PRINT_STATISTICS_DETAILS設(shè)置為1,400毫秒以內(nèi)屬于正常

dylib loading time:加載動(dòng)態(tài)庫所需的時(shí)間

rebase將鏡像讀入內(nèi)存光督,修正鏡像內(nèi)部的指針阳距,性能消耗主要在IO。

bind是查詢符號(hào)表结借,設(shè)置指向鏡像外部的指針筐摘,性能消耗主要在CPU計(jì)算。

Objc setup

runtime會(huì)維護(hù)一張類名與類的方法列表的全局表船老。

讀取所有類咖熟,將類對(duì)象其注冊(cè)到這個(gè)全局表中(class registration)

讀取所有分類,把分類加載到類對(duì)象中(category registration)

檢查selector的唯一性(selector uniquing)

initalizer time:執(zhí)行l(wèi)oad方法的耗時(shí)

冷啟動(dòng)的三大階段:1.dyld 2.runtime 3.main

1.dyld:Apple的動(dòng)態(tài)連接器柳畔,可以用來裝在Mach-0文件

優(yōu)化:

減少動(dòng)態(tài)庫馍管,合并一些動(dòng)態(tài)庫

減少Objc類,分類的數(shù)量薪韩,減少Selector數(shù)量确沸,定期清理沒有使用的類捌锭,分類

減少C++虛函數(shù)數(shù)量

swift盡量使用struct代替類

2.runtime:

調(diào)用map_images進(jìn)行可執(zhí)行文件內(nèi)容的解析和處理

在load_images中調(diào)用call_load_methods,調(diào)用所有Class和Category的+load方法

進(jìn)行各種objc結(jié)構(gòu)的初始化(注冊(cè)O(shè)bjc類,初始化類對(duì)象等)

通過C++靜態(tài)初始化器和_attribute_((constructor))修飾的函數(shù)

到此為止罗捎,可執(zhí)行文件和動(dòng)態(tài)庫中的所有符號(hào)(Class,Protocol,Selector,IMP...)都已經(jīng)按格式成功加載到內(nèi)存中观谦,被runtime所管理

優(yōu)化:用+initialize+單例代替+load

3.調(diào)用main函數(shù)

優(yōu)化:在不影響用戶體驗(yàn)的前提下,盡可能將一些操作延遲桨菜,不要全部放在finishLaunching中

4.二進(jìn)制重排https://juejin.cn/post/6844904174287585287


APP瘦身:

1.資源進(jìn)行無損壓縮

2.去除沒有用到的資源:https://github.com/tinymind/LSUnusedResources

3.可執(zhí)行文件的瘦身

編譯器優(yōu)化:Strip Linked Product,Make Strings Read-Only,Symbols Hidden By Default設(shè)置為YES

去掉異常支持:Enable C++ Exceptions,Enable Objective-C Exceptions設(shè)置為NO豁状,Other C Flags添加-fno-exceptions

4.檢測未使用的代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市倒得,隨后出現(xiàn)的幾起案子泻红,更是在濱河造成了極大的恐慌,老刑警劉巖霞掺,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谊路,死亡現(xiàn)場離奇詭異,居然都是意外死亡根悼,警方通過查閱死者的電腦和手機(jī)凶异,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挤巡,“玉大人剩彬,你說我怎么就攤上這事】蟊埃” “怎么了喉恋?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長母廷。 經(jīng)常有香客問我轻黑,道長,這世上最難降的妖魔是什么琴昆? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任氓鄙,我火速辦了婚禮,結(jié)果婚禮上业舍,老公的妹妹穿的比我還像新娘抖拦。我一直安慰自己,他們只是感情好舷暮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布态罪。 她就那樣靜靜地躺著,像睡著了一般下面。 火紅的嫁衣襯著肌膚如雪复颈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天沥割,我揣著相機(jī)與錄音耗啦,去河邊找鬼凿菩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛帜讲,可吹牛的內(nèi)容都是我干的蓄髓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼舒帮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陡叠?” 一聲冷哼從身側(cè)響起玩郊,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枉阵,沒想到半個(gè)月后译红,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兴溜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年侦厚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拙徽。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刨沦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膘怕,到底是詐尸還是另有隱情想诅,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布岛心,位于F島的核電站来破,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忘古。R本人自食惡果不足惜徘禁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望髓堪。 院中可真熱鬧送朱,春花似錦、人聲如沸旦袋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疤孕。三九已至商乎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祭阀,已是汗流浹背鹉戚。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工鲜戒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抹凳。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓遏餐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赢底。 傳聞我的和親對(duì)象是個(gè)殘疾皇子失都,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • CPU和GPU 在屏幕成像的過程中,CPU和GPU起著至關(guān)重要的作用幸冻。 1粹庞、CPU即是中英處理器,對(duì)象的創(chuàng)建和銷毀...
    Mr周190728閱讀 674評(píng)論 0 0
  • CPU和GPU 在屏幕成像的過程中洽损,CPU和GPU起著至關(guān)重要的作用庞溜。1、CPU即是中英處理器碑定,對(duì)象的創(chuàng)建和銷毀流码、...
    搬運(yùn)工開發(fā)者閱讀 6,008評(píng)論 0 31
  • # 程序內(nèi)容加載順序 1.啟動(dòng) dyld,將二進(jìn)制文件初始化 2.ImageLoader 把二進(jìn)制文件加載進(jìn)內(nèi)存 ...
    胖子帥閱讀 145評(píng)論 0 0
  • 一延刘、啟動(dòng)時(shí)間測量(優(yōu)化啟動(dòng)時(shí)間) 1漫试、main函數(shù)前執(zhí)行的時(shí)間 在此階段系統(tǒng)做的任務(wù)為: 1.1. 加載應(yīng)用的可執(zhí)...
    A維生素A閱讀 569評(píng)論 0 0
  • 啟動(dòng)問題,APP啟動(dòng)慢碘赖,從啟動(dòng)到展示主頁面視圖需要5秒以上商虐。 首先,研究APP啟動(dòng)流程崖疤。 優(yōu)化方向秘车,main函數(shù)之...
    瞌睡樹懶閱讀 770評(píng)論 0 0