-
如何讓 Xcode 在讀寫上提速100倍?
/2017-04-26 18:13:23/
-
上個(gè)月參加了一場西雅圖當(dāng)?shù)氐木€下 iOS 開發(fā)者聚會。Jeff Szuhay 作為一個(gè)有20+年開發(fā)經(jīng)驗(yàn)的資深程序員,跟我講了一套提高 iOS 開發(fā)效率的方法。相比于其他程序員在 App 啟動時(shí)間、架構(gòu)優(yōu)化方面的經(jīng)驗(yàn),老爺子 Jeff 的優(yōu)化基于硬件層面,匠心獨(dú)運(yùn),極客風(fēng)十足。以下是他的經(jīng)驗(yàn)分享和我個(gè)人的實(shí)測。
問題來源
我們都知道 Xcode 在運(yùn)行或編譯時(shí),會有大量的讀寫操作。例如從硬盤中調(diào)用圖片,我們會這么操作:
let image = UIImage(named: "imageName")
這時(shí)候 Xcode 就會去電腦的硬盤中去找到圖片,完成讀寫操作。類似的操作還有存取文件等等。如果這類讀取數(shù)量比較少,那么無傷大雅,但是一旦多起來,尤其是大項(xiàng)目在后期產(chǎn)生了大量的 DerivedData 存在硬盤上,Xcode 在編譯時(shí)就會花大量時(shí)間去硬盤(Disk)上完成讀寫這些數(shù)據(jù)的操作。更不幸的是有時(shí)候還會遇到硬盤故障等問題。
解決思路
正所謂“哪里需要優(yōu)化,哪里就需要程序員”,Jeff 在這個(gè)時(shí)候作為一名白衣騎士登場了。多年的計(jì)算機(jī)研究讓他對整個(gè)計(jì)算機(jī)架構(gòu)非常熟悉。下圖是他展示的計(jì)算機(jī)結(jié)構(gòu)簡圖。
計(jì)算機(jī)結(jié)構(gòu)簡圖此圖簡潔明了得說明了計(jì)算機(jī)的基本架構(gòu)。左上角是計(jì)算機(jī)的大腦,CPU,負(fù)責(zé)核心計(jì)算和處理工作;右上角是內(nèi)存(RAM),用來運(yùn)行程序并與 CPU 進(jìn)行數(shù)據(jù)交流;中間的線是總線,負(fù)責(zé)各個(gè)模塊之間傳遞信息和信號;圖下側(cè)是基本的 System IO。
再回來看我們的問題:Xcode 現(xiàn)在是在 RAM 中運(yùn)行,然后到 Storage 中讀寫數(shù)據(jù),數(shù)據(jù)接著再傳回 RAM。這種方式有兩個(gè)瓶頸:
- Storage 速度很慢。即使是最先進(jìn)的 SSD,其速度也比 RAM 慢了400倍。也就是無論你怎么在軟件層優(yōu)化,其速度也無法突破 SSD 的瓶頸;
- 數(shù)據(jù)要不停的在各個(gè)模塊之間傳遞。傳遞過程中亦有延時(shí)和無謂的時(shí)間消耗。
針對以上兩個(gè)瓶頸,Jeff 認(rèn)為,如果我們可以讓所有的讀寫操作都在內(nèi)存(RAM)中完成,那么必然能大幅提高 Xcode 的工作效率。問題是,怎么實(shí)現(xiàn)?
實(shí)現(xiàn)方法
方法的思路很簡單,大概可以分兩步:
- 配置 RAM。在內(nèi)存中專門開出一塊讓 Xcode 使用。
- 連接 Xcode。讓 Xcode 連接到我們開辟出來的專屬內(nèi)存空間。
下面就是見證奇跡的時(shí)刻。
第一步, 創(chuàng)建 .sh 文件。代碼如下。
#!/bin/bash RAMDISK=”ramdisk” SIZE=1024 #size in MB for ramdisk. diskutil erasevolume HFS+ $RAMDISK `hdiutil attach -nomount ram://$[SIZE*2048]`
第二步, 運(yùn)行 .sh 文件。在命令行中敲下。
之后你會發(fā)現(xiàn)你會多出一個(gè)叫 ramdisk 的內(nèi)存空間,有大概 1 GB 大小。
第三步,連接 Xcode。Xcode -> Preferences -> Locations -> Locations Tab,配置 DerivedData。
Advanced... 也要配置成下圖所示
以上就是全部步驟。這時(shí)候你就可以享受飛一般的開發(fā)了。現(xiàn)在 Project 中所有文件都在內(nèi)存中,相比于 SSD,理論上是要快上一個(gè)數(shù)量級。
注意事項(xiàng)
-
合理分配內(nèi)存空間。我這里分配了 1GB 的內(nèi)存當(dāng)硬盤使,是因?yàn)槲译娔X本身有 16GB 內(nèi)存空間。假如你電腦內(nèi)存只有 4GB,我不建議你使用這個(gè)方法,或者建議只分配 256M 空間給 Xcode。總之,注意內(nèi)存不足或溢出的情況。
-
只把 DerivedData 放在 Ram Disk 中。為了極限速度,你當(dāng)然可以把 App 相關(guān)所有的文件都放在內(nèi)存空間中。但是要知道,我們創(chuàng)造的 Ram Disk 本質(zhì)是內(nèi)存,當(dāng)關(guān)機(jī)或重啟的時(shí)候,在 Ram Disk 中的數(shù)據(jù)是會丟失的。而 DerivedData 是可以重新生成的,所以放在 Ram Disk 中可以最大限度的提高 Xcode 開發(fā)中的讀取速度,且十分安全。
- 開發(fā)平臺
- 微信公眾號開發(fā)
- IOS 開發(fā)
- 安卓開發(fā)
- 網(wǎng)站建設(shè)
- 熱門文章
- 1.如何讓 Xcode 在讀寫上提速100倍?
- 2.AIRBNB 用這個(gè)流程,大幅提高了開發(fā)和設(shè)計(jì)的協(xié)作效率
- 3.如何設(shè)計(jì)內(nèi)容精確、體驗(yàn)友好的DASHBOARD?(上篇)
- 4.餐飲革命:星廚餐幫與宏思銳達(dá)達(dá)成數(shù)字化產(chǎn)品開發(fā)戰(zhàn)略合作
- 5.拼必達(dá)-貴州第一個(gè)智慧同城配送平臺(宏思銳達(dá)研發(fā))
- 推薦文章
- 1.可能是最全面的組件化開發(fā)與設(shè)計(jì)指南
- 2.一個(gè)APP界面設(shè)計(jì)完整流程詳解
- 3.設(shè)計(jì)思考:當(dāng)項(xiàng)目中遇到技術(shù)限制,設(shè)計(jì)該如何彌補(bǔ)?
- 4.設(shè)計(jì)師如何打造雙11網(wǎng)紅爆款?揭秘天貓精靈的全鏈路營銷設(shè)
- 5.深度剖析APP開發(fā)價(jià)格為什么這么貴?
- 最新標(biāo)簽
- APP開發(fā)