• 如何讓 Xcode 在讀寫上提速100倍?

    /2017-04-26 18:13:23/

  • \


    上個月參加了一場西雅圖當地的線下 iOS 開發者聚會。Jeff Szuhay 作為一個有20+年開發經驗的資深程序員,跟我講了一套提高 iOS 開發效率的方法。相比于其他程序員在 App 啟動時間、架構優化方面的經驗,老爺子 Jeff 的優化基于硬件層面,匠心獨運,極客風十足。以下是他的經驗分享和我個人的實測。

    問題來源

    我們都知道 Xcode 在運行或編譯時,會有大量的讀寫操作。例如從硬盤中調用圖片,我們會這么操作:

    let image = UIImage(named: "imageName")

    這時候 Xcode 就會去電腦的硬盤中去找到圖片,完成讀寫操作。類似的操作還有存取文件等等。如果這類讀取數量比較少,那么無傷大雅,但是一旦多起來,尤其是大項目在后期產生了大量的 DerivedData 存在硬盤上,Xcode 在編譯時就會花大量時間去硬盤(Disk)上完成讀寫這些數據的操作。更不幸的是有時候還會遇到硬盤故障等問題。

    解決思路

    正所謂“哪里需要優化,哪里就需要程序員”,Jeff 在這個時候作為一名白衣騎士登場了。多年的計算機研究讓他對整個計算機架構非常熟悉。下圖是他展示的計算機結構簡圖。


    計算機結構簡圖

    此圖簡潔明了得說明了計算機的基本架構。左上角是計算機的大腦,CPU,負責核心計算和處理工作;右上角是內存(RAM),用來運行程序并與 CPU 進行數據交流;中間的線是總線,負責各個模塊之間傳遞信息和信號;圖下側是基本的 System IO。

    再回來看我們的問題:Xcode 現在是在 RAM 中運行,然后到 Storage 中讀寫數據,數據接著再傳回 RAM。這種方式有兩個瓶頸:

    • Storage 速度很慢。即使是最先進的 SSD,其速度也比 RAM 慢了400倍。也就是無論你怎么在軟件層優化,其速度也無法突破 SSD 的瓶頸;
    • 數據要不停的在各個模塊之間傳遞。傳遞過程中亦有延時和無謂的時間消耗。

    針對以上兩個瓶頸,Jeff 認為,如果我們可以讓所有的讀寫操作都在內存(RAM)中完成,那么必然能大幅提高 Xcode 的工作效率。問題是,怎么實現?

    實現方法

    方法的思路很簡單,大概可以分兩步:

    1. 配置 RAM。在內存中專門開出一塊讓 Xcode 使用。
    2. 連接 Xcode。讓 Xcode 連接到我們開辟出來的專屬內存空間。

    下面就是見證奇跡的時刻。

    第一步, 創建 .sh 文件。代碼如下。

    #!/bin/bash RAMDISK=”ramdisk”
    SIZE=1024 #size in MB for ramdisk. diskutil erasevolume HFS+ $RAMDISK `hdiutil attach -nomount ram://$[SIZE*2048]`

    第二步, 運行 .sh 文件。在命令行中敲下。


    之后你會發現你會多出一個叫 ramdisk 的內存空間,有大概 1 GB 大小。


    第三步,連接 Xcode。Xcode -> Preferences -> Locations -> Locations Tab,配置 DerivedData。


    Advanced... 也要配置成下圖所示


    以上就是全部步驟。這時候你就可以享受飛一般的開發了?,F在 Project 中所有文件都在內存中,相比于 SSD,理論上是要快上一個數量級。

    注意事項

    • 合理分配內存空間。我這里分配了 1GB 的內存當硬盤使,是因為我電腦本身有 16GB 內存空間。假如你電腦內存只有 4GB,我不建議你使用這個方法,或者建議只分配 256M 空間給 Xcode??傊?,注意內存不足或溢出的情況。

    • 只把 DerivedData 放在 Ram Disk 中。為了極限速度,你當然可以把 App 相關所有的文件都放在內存空間中。但是要知道,我們創造的 Ram Disk 本質是內存,當關機或重啟的時候,在 Ram Disk 中的數據是會丟失的。而 DerivedData 是可以重新生成的,所以放在 Ram Disk 中可以最大限度的提高 Xcode 開發中的讀取速度,且十分安全。

<
上一篇: 記憶大師的海報風格是怎么做的? 下一篇: ReactNative中TabBarIOS和NavigatorIOS嵌套使用

Hi,互相認識一下

很高興遇見你,友誼往往從第一次握手開始, 微信聯系: 13765801787

91久久久久无码精品国产|好吊妞国产日韩欧美在线观看|美国乱人伦中文视频在线|国产日韩另类中字