第三季:架構(gòu)&性能&體系

目標(biāo):

1.要達(dá)到什么樣的流暢度(FPS達(dá)到60為優(yōu)秀) FPS:1秒渲染多少幀

2.應(yīng)用內(nèi)存降到一個(gè)具體數(shù)字


方案: 可以通過(guò)兩個(gè)的緯度考慮性能優(yōu)化

CPU與GPU資源消耗原因以及解決辦法

CPU:加載對(duì)圖文布局

加載資源冠蒋,對(duì)象創(chuàng)建婴梧,對(duì)象調(diào)整呻袭,對(duì)象銷(xiāo)毀纵朋,圖片解碼,圖片繪制,文本計(jì)算,文本渲染擎淤,布局計(jì)算,布局Autolayout

GPU:文視圖

紋理渲染秸仙,視圖混合嘴拢,圖形形成(三角,遮罩)

GPU的渲染性能比CPU高效很多寂纪,同時(shí)對(duì)系統(tǒng)的負(fù)載和消耗更低一些席吴,所以,我們應(yīng)該盡量讓CPU負(fù)責(zé)主線程UI調(diào)動(dòng)捞蛋,圖形顯示相關(guān)工作交給GPU


軟件性能優(yōu)化:啟動(dòng)內(nèi)存管理:4避免孝冒,3圖片,NSAutoreleasepool/coreText ,網(wǎng)絡(luò)優(yōu)化

1.啟動(dòng)優(yōu)化

2.內(nèi)存管理

使用ARC,避免循環(huán)引用拟杉,CoreAnimation對(duì)象手動(dòng)釋放

3.避免主線程阻塞

永遠(yuǎn)不要使主線程承擔(dān)過(guò)多

阻礙主進(jìn)程的情形:1.網(wǎng)絡(luò)同步請(qǐng)求2.I/0操作:讀寫(xiě)外部資源3.大量運(yùn)算4.解壓縮

4.避免過(guò)于龐大的XIB


5.避免使用透明視圖

透明對(duì)性能要求較高

6.避免離屏渲染

離屏渲染庄涡,指的是GPU在當(dāng)前屏幕緩沖區(qū)以外新開(kāi)辟一個(gè)緩沖區(qū)進(jìn)行渲染操作。離屏渲染意味著你App的部分區(qū)域每一幀渲染了兩次搬设。所以會(huì)造成一定的性能損失穴店。

7.圖片的處理

通常會(huì)用imageNamed:來(lái)加載mainbundle中的圖片,此函數(shù)會(huì)緩存加載的image焕梅。因此,對(duì)于那些被重用的圖片卦洽,這個(gè)API很高效贞言。但是對(duì)于那些使用很少的圖片,用這個(gè)就很耗內(nèi)存阀蒂。

使用一次的應(yīng)用圖片時(shí)使用initWithContentsOfFile:函數(shù)该窗,加載多次使用的圖片時(shí)就使用imageNamed:函數(shù)弟蚀。?

8.在Imageview中調(diào)整圖片大小:

1. 如果要在UIImageview中顯示本地資源圖片,盡量保持大小一致酗失,運(yùn)行中縮放圖片很消耗資源

2.如果圖片是從遠(yuǎn)端服務(wù)加載的不能控制圖片大小义钉,最好縮放一次,然后在UIImageView中使用縮放后的圖片

9.使用緩存/SDWebImage與Cache

因?yàn)閿?shù)據(jù)具有時(shí)效的规肴,所以對(duì)于時(shí)效性要求不高的數(shù)據(jù)完全可以使用緩存來(lái)保證快速顯示捶闸。例如URL對(duì)應(yīng)的圖片緩存(SDWebImage),通過(guò)數(shù)據(jù)庫(kù)活core Data來(lái)保存不需要變動(dòng)的數(shù)據(jù)拖刃,UIWeb的緩存等都屬于這種


10.NSAutoreleasepool

在臨時(shí)創(chuàng)建大量對(duì)象時(shí)删壮,使用NSAutoreleasepool,例如兑牡,一個(gè)循環(huán)用于創(chuàng)建包含多個(gè)對(duì)象的數(shù)組央碟,在循環(huán)體內(nèi),即可使用@autoreleasepool包裹創(chuàng)建代碼均函。使用系統(tǒng)的@autoreleasepool會(huì)有延遲亿虽,內(nèi)存不會(huì)馬上釋放。

11.CoreText

對(duì)于排版復(fù)雜的文字或者圖文混排苞也,使用CoreText技術(shù)?

12.減少Layer與視圖層級(jí)

減少視圖或者layer的層級(jí)數(shù)量洛勉,在有多個(gè)層級(jí)時(shí),可以將多圖合并成一張圖墩朦,再渲染顯示坯认。

13.重用一些高消耗的對(duì)象

如NSDateFormatter、NSCalender等氓涣。解決方法:可以將其作為property牛哺、甚至是靜態(tài)變量作為單例在APP中使用。并且劳吠,NSDateFormatter的 setDateFormate也是非常消耗資源的一個(gè)操作引润。網(wǎng)絡(luò)傳輸過(guò)來(lái)的數(shù)據(jù),往往是json或xml字符串痒玩。直接將這些字符串轉(zhuǎn)換成我們需要的數(shù)據(jù)結(jié)構(gòu)(自定義類或者NSDictionary),避免后續(xù)使用的時(shí)候還要做數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換產(chǎn)生不必要的消耗淳附。

14.關(guān)于后臺(tái)運(yùn)行

進(jìn)入后臺(tái)后,即盡量減少內(nèi)存占用蠢古、釋放所有的共享資源(如Calender或address book)奴曙,因?yàn)閕OS會(huì)kill后臺(tái)中內(nèi)存消耗最多的或者進(jìn)入后臺(tái)還占用共享資源的進(jìn)程。

15.網(wǎng)絡(luò)性能

網(wǎng)絡(luò)性能優(yōu)化涉及到DNS解析草讶,路由算法洽糟,以及服務(wù)器端性能

攜程網(wǎng)絡(luò)優(yōu)化策略

移動(dòng)網(wǎng)絡(luò)優(yōu)化三要素


16.網(wǎng)絡(luò)

1. Socket: 熟悉TCP/IP協(xié)議族,定義了主機(jī)如何連入因特網(wǎng)及數(shù)據(jù)束河在他們之間傳輸

? ? ? ? 應(yīng)用層: HTTP? SNMP? FTP? NDS

? ? ? ? 傳輸層: TCP UDP

? ? ? ? 網(wǎng)絡(luò)層: IP

? ? 1.Socket描述了一個(gè)IP, 端口對(duì)。它簡(jiǎn)化了程序的操作坤溃,知道對(duì)方的IP以及PORT就可以給對(duì)方發(fā)送消息拍霜,再由服務(wù)器來(lái)處理發(fā)送的這些消息。所以薪介,socket一定包含了通信的雙發(fā)祠饺,即客戶端(Client)與服務(wù)器(server).

? ? ? a: 服務(wù)端利用socket監(jiān)聽(tīng)端口

? ? ? b: 客戶端發(fā)起連接

? ? ? c: 服務(wù)端返回信息,建立連接汁政,開(kāi)始通信

? ? ? d: 客戶端道偷,服務(wù)端斷開(kāi)連接

? ? 2.套接字(socket)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本單元烂完;

? ? ? ? 應(yīng)用層通過(guò)傳輸層進(jìn)行數(shù)據(jù)通信時(shí)试疙,TCP會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的進(jìn)程。

? ? ? ? 多個(gè)TCP連接或者多個(gè)應(yīng)用程序進(jìn)程可能需要通過(guò)同一個(gè)TCP協(xié)議端口傳輸數(shù)據(jù)抠蚣,為了區(qū)分不同的應(yīng)用程序進(jìn)程或連接

? ? ? ? 許多計(jì)算機(jī)系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(socket)接口祝旷,應(yīng)用層和傳輸層通過(guò)socket接口,區(qū)分來(lái)自不同應(yīng)用程序或者網(wǎng)絡(luò)連接的通信嘶窄,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)怀跛;

? ? 3. 建立socket連接至少需要一對(duì)套接字,其中一個(gè)運(yùn)行于客戶端(Clientsocket),另一個(gè)運(yùn)行于服務(wù)器端(Serversocket);

? ? ? ? 套接字之間的連接分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng)? 客戶端請(qǐng)求? 連接確認(rèn)柄冲。

? ? 4.創(chuàng)建Socket連接時(shí)吻谋,可以指定使用的傳輸層協(xié)議,Socket可以支持不同的傳輸層協(xié)議(TCP或UDP)现横,當(dāng)使用TCP協(xié)議進(jìn)行連接時(shí)漓拾,該Socket連接就是一個(gè)TCP連接。

五戒祠、產(chǎn)生死鎖的四個(gè)條件

1.互斥條件 2.占有等待 3.不可強(qiáng)行占有 4.循環(huán)等待

六骇两、擁塞控制

?某段時(shí)間,對(duì)網(wǎng)絡(luò)中資源需求大于可用的造成擁塞

解決方案

1.慢開(kāi)始:最初TCP建立連接后向網(wǎng)絡(luò)發(fā)送大量數(shù)據(jù)包姜盈,很容易導(dǎo)致網(wǎng)絡(luò)中路由器緩存空間耗盡

2.擁塞避免:每次訪問(wèn)結(jié)束讓CWND增加一個(gè)低千,而不是一倍,增加的更加緩慢

3.快重傳與快恢復(fù)算法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馏颂,一起剝皮案震驚了整個(gè)濱河市示血,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌救拉,老刑警劉巖难审,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異亿絮,居然都是意外死亡告喊,警方通過(guò)查閱死者的電腦和手機(jī)拂铡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)葱绒,“玉大人,你說(shuō)我怎么就攤上這事斗锭〉氐恚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵岖是,是天一觀的道長(zhǎng)帮毁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)豺撑,這世上最難降的妖魔是什么烈疚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮聪轿,結(jié)果婚禮上爷肝,老公的妹妹穿的比我還像新娘。我一直安慰自己陆错,他們只是感情好灯抛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著音瓷,像睡著了一般对嚼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绳慎,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天纵竖,我揣著相機(jī)與錄音,去河邊找鬼杏愤。 笑死靡砌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的声邦。 我是一名探鬼主播乏奥,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亥曹!你這毒婦竟也來(lái)了邓了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤媳瞪,失蹤者是張志新(化名)和其女友劉穎骗炉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蛇受,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡句葵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乍丈。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剂碴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轻专,到底是詐尸還是另有隱情忆矛,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布请垛,位于F島的核電站催训,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宗收。R本人自食惡果不足惜漫拭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望混稽。 院中可真熱鬧采驻,春花似錦、人聲如沸匈勋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颓影。三九已至各淀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诡挂,已是汗流浹背碎浇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留璃俗,地道東北人奴璃。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像城豁,于是被迫代替她去往敵國(guó)和親苟穆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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