檢測(cè)app性能并實(shí)現(xiàn)優(yōu)化-圖形性能篇

很多尚未成熟的App都會(huì)存在很多問題,如卡頓、耗電浆洗、內(nèi)存管理等等吼野,包括我們項(xiàng)目App。今天有空閑時(shí)間岸售,就決定對(duì)部分性能進(jìn)行優(yōu)化,當(dāng)然工具主要就是用Xcode自帶的Core Animation了。話不多說胁后,開干。

Core Animation啟動(dòng)運(yùn)行

  • 打開Xcode對(duì)當(dāng)前項(xiàng)目Profile嗦枢,點(diǎn)擊Product再點(diǎn)擊Profile

  • 這時(shí)就會(huì)打開 Profiling Template 選項(xiàng)對(duì)話框:

coreanimation.png
  • 選擇Core Animation即可

  • 點(diǎn)擊紅色運(yùn)行按鈕啟動(dòng)App攀芯,隨后操作App就能看到FPS和CPU等性能信息了

但是你看到這些信息了,發(fā)現(xiàn)了問題文虏,該如何優(yōu)化呢侣诺,下面就用Core Animation來一個(gè)個(gè)優(yōu)化

在右下角面板的 Display Settings 區(qū)域,我們可以看到多個(gè) Debug Options

coreDebug.png

接下來一個(gè)一個(gè)看氧秘。

Color Blended Layers

這個(gè)選項(xiàng)選項(xiàng)基于渲染程度對(duì)屏幕中的混合區(qū)域進(jìn)行綠到紅的高亮顯示年鸳,越紅表示性能越差,會(huì)對(duì)幀率等指標(biāo)造成較大的影響丸相。紅色通常是由于多個(gè)半透明圖層疊加引搔确,而且無用的圖層疊加越多,顏色越紅。所以對(duì)這個(gè)做性能優(yōu)化就是盡量保證圖層疊加少膳算,并盡量減少對(duì)透明度的使用座硕。下面就是優(yōu)化后的App界面與微信朋友圈的對(duì)比,可以看出這個(gè)性能比微信還更勝一籌涕蜂。

IMG_3710.PNG

IMG_3709.PNG

Color Hits Green and Misses Red
當(dāng) UIView.layer.shouldRasterize = YES 時(shí)华匾,耗時(shí)的圖片繪制會(huì)被緩存,并當(dāng)做一個(gè)簡(jiǎn)單的扁平圖片來呈現(xiàn)机隙。這時(shí)候蜘拉,如果頁面的其他區(qū)塊(比如 UITableViewCell 的復(fù)用)使用緩存直接命中,就顯示綠色有鹿,反之旭旭,如果不命中,這時(shí)就顯示紅色葱跋。紅色越多您机,性能越差。因?yàn)闁鸥窕删彺娴倪^程是有開銷的年局,如果緩存能被大量命中和有效使用际看,則總體上會(huì)降低開銷,反之則意味著要頻繁生成新的緩存矢否,這會(huì)讓性能問題雪上加霜仲闽。
所以這里的這個(gè)緩存就需要慎重使用,而我們App包括微信QQ支付寶等我看也基本沒有使用這個(gè)方式僵朗。而我們App的statusBar會(huì)經(jīng)常閃紅色赖欣,這是因?yàn)槲沂褂昧艘粋€(gè)CPU和FPS的實(shí)時(shí)查看工具,需要經(jīng)常刷新顯示验庙,所以就沒啥解決的顶吮。

IMG_3713.PNG

Color Copied Images

對(duì)于 GPU 不支持的色彩格式的圖片只能由 CPU 來處理,把這樣的圖片標(biāo)為藍(lán)色粪薛。藍(lán)色越多悴了,性能越差。因?yàn)槲ナ伲覀儾幌M跐L動(dòng)視圖的時(shí)候湃交,由 CPU 來處理圖片,這樣可能會(huì)對(duì)主線程造成阻塞藤巢「爿海看了App好幾個(gè)頁面,發(fā)現(xiàn)根本不會(huì)出現(xiàn)這里所說的藍(lán)色掂咒,但我查看支付寶QQ就發(fā)現(xiàn)了幾個(gè)藍(lán)色的地方才沧,不知道是他們有特殊的考慮還是沒發(fā)現(xiàn)這問題迈喉,但問題也特少,影響不大温圆。圖就不上了

Color Non-Standard Surface Formats

這個(gè)性能發(fā)現(xiàn)基本上沒有資料能查到弊添,打開這個(gè)性能檢測(cè)后,發(fā)現(xiàn)App上很多淺灰色色塊捌木,并且有個(gè)規(guī)律,它們都是沒有設(shè)置背景色的區(qū)域嫉戚,后來自己設(shè)置了背景色就沒有色塊了刨裆,但我不知道是前者還是后者性能好,希望知道的人解答一下彬檀。但我發(fā)現(xiàn)QQ支付寶這些大型的App也沒有對(duì)這些做處理帆啃,而且發(fā)現(xiàn)蘋果原生界面也有很多這種灰色色塊,所以我也沒有對(duì)當(dāng)前App的這些問題做處理窍帝,上一組圖看看效果努潘。

IMG_3715.PNG

IMG_3714.PNG

Color Immediately

通常 Core Animation Instruments 以每毫秒 10 次的頻率更新圖層調(diào)試顏色。對(duì)某些效果來說坤学,這顯然太慢了疯坤。這個(gè)選項(xiàng)就可以用來設(shè)置每幀都更新(可能會(huì)影響到渲染性能,而且會(huì)導(dǎo)致幀率測(cè)量不準(zhǔn)深浮,所以不要一直都設(shè)置它)压怠。這是一個(gè)輔助調(diào)試工具,本身是沒有啥效果的飞苇,需要聯(lián)合其他調(diào)試類別菌瘫。

Color Misaligned Images

這個(gè)選項(xiàng)檢查了圖片是否被縮放,以及像素是否對(duì)齊布卡。被放縮的圖片會(huì)被標(biāo)記為黃色雨让,像素不對(duì)齊則會(huì)標(biāo)注為紫色。黃色忿等、紫色越多栖忠,性能越差。主要是將控件按照?qǐng)D片大小來設(shè)定大小贸街,如點(diǎn)贊娃闲、評(píng)論、分割線和聊天按鈕匾浪,還有就是頭像圖片在下載的時(shí)候就從cdn下載自己需要的大小皇帮,這樣圖片的黃色縮放問題就沒了;再就是控件的寬高最好是整數(shù),因?yàn)樘O果的屏幕最小單位是1像素蛋辈,如果有小數(shù)了属拾,設(shè)備顯示就會(huì)多次再計(jì)算将谊,再選擇一個(gè)整數(shù)像素來顯示。而單張大圖由于需求原因渐白,暫時(shí)沒有做處理尊浓。下面就是前后對(duì)比圖:

IMG_3722.PNG

IMG_3723.PNG

Color Offscreen-Rendered Yellow

這個(gè)選項(xiàng)會(huì)把那些離屏渲染的圖層顯示為黃色。黃色越多纯衍,性能越差栋齿。這些顯示為黃色的圖層很可能需要用 shadowPath 或者 shouldRasterize 來優(yōu)化。這里只需要少使用圖層的clipsToBounds和layer層的masksToBounds方法即可襟诸。

color compositing fast-path blue

官方說明:“Places a blue overlay over content that is detached from the compositor.”標(biāo)記由硬件繪制的路徑為藍(lán)色瓦堵,藍(lán)色越多越好,可以對(duì)直接使用OpenGL繪制的圖層進(jìn)行高亮歌亲。對(duì)OpenGL沒什么研究菇用,所以這里沒辦法給出方法,大家只需要記住藍(lán)色越多越好就ok陷揪。

Flash Updated Regions

這個(gè)選項(xiàng)會(huì)把重繪的內(nèi)容顯示為黃色惋鸥。不該出現(xiàn)的黃色越多,性能越差悍缠。通常我們希望只是更新的部分被標(biāo)記完黃色卦绣。當(dāng)你滑動(dòng)app視圖的時(shí)候屏幕就是黃色的,建議大家少用這個(gè)調(diào)試飞蚓,因?yàn)椤?gt;閃得眼睛疼迎卤!

我們也可以使用OpenGL ES Analysis來監(jiān)測(cè)圖形的相關(guān)性能。謝謝支持玷坠!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜗搔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子八堡,更是在濱河造成了極大的恐慌樟凄,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兄渺,死亡現(xiàn)場(chǎng)離奇詭異缝龄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)挂谍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門叔壤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人口叙,你說我怎么就攤上這事炼绘。” “怎么了妄田?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵俺亮,是天一觀的道長(zhǎng)驮捍。 經(jīng)常有香客問我,道長(zhǎng)脚曾,這世上最難降的妖魔是什么东且? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮本讥,結(jié)果婚禮上珊泳,老公的妹妹穿的比我還像新娘。我一直安慰自己拷沸,他們只是感情好色查,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堵漱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涣仿。 梳的紋絲不亂的頭發(fā)上勤庐,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音好港,去河邊找鬼愉镰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钧汹,可吹牛的內(nèi)容都是我干的丈探。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼拔莱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼碗降!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起塘秦,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤讼渊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后尊剔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爪幻,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年须误,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挨稿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡京痢,死狀恐怖奶甘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祭椰,我是刑警寧澤甩十,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布船庇,位于F島的核電站,受9級(jí)特大地震影響侣监,放射性物質(zhì)發(fā)生泄漏鸭轮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一橄霉、第九天 我趴在偏房一處隱蔽的房頂上張望窃爷。 院中可真熱鬧,春花似錦姓蜂、人聲如沸按厘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逮京。三九已至,卻和暖如春束莫,著一層夾襖步出監(jiān)牢的瞬間懒棉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工览绿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留策严,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓饿敲,卻偏偏與公主長(zhǎng)得像妻导,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怀各,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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