iOS編譯速度優(yōu)化方案

背景

隨著項目規(guī)模越來越大 編譯速度越來越慢 是一個逃不過的問題 特別是硬件資源有限的情況下 首次編譯時間 十幾二十分鐘成了司空見慣的事 很大程度上影響了開發(fā)效率和寫代碼的心情 像我15款 mbp 編譯代碼量約20萬行 100個pod庫的項目 大概需要20分鐘 就算是第二次編譯 也基本需要3分鐘以上 占用了大量編寫代碼的時間 故優(yōu)化編譯速度至關(guān)重要

編譯原理

程序編譯一般需經(jīng)幾個步驟:預(yù)處理、編譯秤掌、匯編弃锐、鏈接。
編譯是通過編譯器 把一種編程語言(原始語言)轉(zhuǎn)換為另一種編程語言(目標(biāo)語言)奴拦,編譯生成一份完整的機(jī)器碼 然后再執(zhí)行兰怠。
原始語言是程序員直接編程的語言 如OC Swift
目標(biāo)語言是計算機(jī)可以執(zhí)行的二進(jìn)制指令機(jī)器碼
編譯器大多由兩部分組成:編譯器前端 Clang畦攘、編譯器后端 LLVM
編譯器前端 Clang:預(yù)處理 --> 詞法分析 --> 語法分析 --> 生成IR(Clang Code Generator)
編譯器后端 LLVM:對IR優(yōu)化 --> 目標(biāo)代碼--> 匯編器 --> 機(jī)器碼(LLVM Code Generator)--> 鏈接 --> Mac-O文件

優(yōu)化方案

1霸妹、提升硬件性能(換個好點(diǎn)的電腦)
這是最有效也是最便捷的優(yōu)化方案 只不過成本有點(diǎn)高 好電腦貴
2、組件二進(jìn)制
組件二進(jìn)制通常指的是 把我們使用的第三方pod庫或者自己項目下沉的業(yè)務(wù)庫由代碼格式 打包成framework格式提高編譯速度
組件二進(jìn)制 就是在編譯階段把代碼先打包成庫 再導(dǎo)入到項目的過程
兩種方式:
一念搬、自己制作
自己制作庫的參考方案
二抑堡、拿來主義:
1、cocoapods-packager
2朗徊、cocoapods-binary
3首妖、cocoapods-imy-bin
3、Xcode參數(shù)設(shè)置
一爷恳、Debug Information Format設(shè)置
Debug改為DWARF有缆,不生成dSYM
使用Instruments調(diào)試工具需要改回DWARF with dSYM file 不然會在Instruments中找不到調(diào)用堆棧

Debug Information Format設(shè)置

二、Precompile Prefix Header 設(shè)置為YES
預(yù)編譯頭文件,PCH 文件預(yù)編譯完成后棚壁,后面用到 PCH 文件的源文件編譯速度也會加快杯矩,缺點(diǎn)是 PCH 文件和 PCH 引用到的頭文件內(nèi)容一旦發(fā)生變化,引用到 PCH 的所有源文件都要重新編譯
Precompile Prefix Header 設(shè)置

三袖外、Build Active Architecture Only設(shè)置
Debug改為YES史隆,此項設(shè)置的是是否僅編譯當(dāng)前架構(gòu)的版本,如果為No曼验,會編譯所有架構(gòu)的版本泌射。需要注意的是,此選項在Release模式下必須為NO鬓照。
Build Active Architecture Only設(shè)置

四熔酷、Optimization Level設(shè)置
Optimization Level設(shè)置

五、Enable Index-While-Building Functionality設(shè)置
全設(shè)為NO豺裆。此項默認(rèn)打開拒秘,作用是 Xcode 編譯時會順帶建立代碼索引,但影響編譯速度臭猜。關(guān)閉后Xcode 會換回以前的方式躺酒,在空閑時間建立代碼索引
Enable Index-While-Building Functionality設(shè)置

4、代碼層面的優(yōu)化
一获讳、將常用代碼文件打包靜態(tài)庫
代碼組件化阴颖,切斷不同業(yè)務(wù)代碼之間依賴活喊,使得每次編譯的時候就只需要編譯自己模塊下的代碼
二丐膝、能用@class就用@class,盡量減少文件引用關(guān)系
三钾菊、減少Storybord和xib文件的使用
四帅矗、清理未使用的圖片等資源,清理未使用的類煞烫,或者合并重復(fù)功能的類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浑此,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子滞详,更是在濱河造成了極大的恐慌凛俱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件料饥,死亡現(xiàn)場離奇詭異蒲犬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)岸啡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門原叮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事奋隶±匏停” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵唯欣,是天一觀的道長嘹吨。 經(jīng)常有香客問我,道長境氢,這世上最難降的妖魔是什么躺苦? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮产还,結(jié)果婚禮上匹厘,老公的妹妹穿的比我還像新娘。我一直安慰自己脐区,他們只是感情好愈诚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牛隅,像睡著了一般炕柔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上媒佣,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天匕累,我揣著相機(jī)與錄音,去河邊找鬼默伍。 笑死欢嘿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的也糊。 我是一名探鬼主播炼蹦,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狸剃!你這毒婦竟也來了掐隐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钞馁,失蹤者是張志新(化名)和其女友劉穎虑省,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僧凰,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡探颈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了允悦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膝擂。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡恢口,死狀恐怖馒闷,靈堂內(nèi)的尸體忽然破棺而出庭猩,到底是詐尸還是另有隱情走芋,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布叉寂,位于F島的核電站萍启,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屏鳍。R本人自食惡果不足惜勘纯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钓瞭。 院中可真熱鬧驳遵,春花似錦、人聲如沸山涡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸭丛。三九已至竞穷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鳞溉,已是汗流浹背瘾带。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熟菲,地道東北人看政。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像科盛,于是被迫代替她去往敵國和親帽衙。 傳聞我的和親對象是個殘疾皇子菜皂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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