Skip to content

Instantly share code, notes, and snippets.

@mattt
Last active June 10, 2020 14:18
Show Gist options
  • Select an option

  • Save mattt/7e46d1a26e29e12fb74347b70cfbb288 to your computer and use it in GitHub Desktop.

Select an option

Save mattt/7e46d1a26e29e12fb74347b70cfbb288 to your computer and use it in GitHub Desktop.

Revisions

  1. mattt revised this gist Jun 8, 2020. No changes.
  2. mattt created this gist Jun 8, 2020.
    52 changes: 52 additions & 0 deletions Rakefile
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,52 @@
    require 'benchmark'
    require 'tmpdir'
    require 'json'

    include Benchmark

    namespace :benchmark do
    task all: %i[full_clone shallow_clone curl_unzip]

    task full_clone: ['packages.json'] do
    banner 'clone'
    benchmark { |package| `git clone #{package['url']} --quiet` }
    end

    task shallow_clone: ['packages.json'] do
    banner 'shallow clone'
    benchmark { |package| `git -c advice.detachedHead=false clone --depth 1 --branch #{package['version']} #{package['url']} --quiet` }
    end

    task curl_unzip: ['packages.json'] do
    banner 'curl + unzip'
    benchmark { |package| `curl -s -L #{package['url']}/archive/#{package['version']}.zip -o #{package['name']}#{package['version']}.zip && unzip` }
    end
    end

    task default: 'benchmark:all'

    private

    def banner(title)
    puts
    puts
    puts title
    puts '-' * title.length
    end

    def benchmark
    raise unless block_given?

    packages = JSON.parse(File.read('packages.json'))
    length = packages.keys.map(&:length).max

    Dir.mktmpdir do |tmp|
    Dir.chdir(tmp) do
    Benchmark.bm(length) do |x|
    packages.each do |name, package|
    x.report(name.ljust(length, ' ')) { yield package }
    end
    end
    end
    end
    end
    252 changes: 252 additions & 0 deletions packages.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,252 @@
    {
    "Alamofire": {
    "name": "Alamofire",
    "url": "https://github.com/Alamofire/Alamofire",
    "version": "5.2.1"
    },
    "Charts": {
    "name": "Charts",
    "url": "https://github.com/danielgindi/Charts",
    "version": "v3.5.0"
    },
    "SDWebImage": {
    "name": "SDWebImage",
    "url": "https://github.com/SDWebImage/SDWebImage",
    "version": "5.8.0"
    },
    "ReactiveCocoa": {
    "name": "ReactiveCocoa",
    "url": "https://github.com/ReactiveCocoa/ReactiveCocoa",
    "version": "10.3.0"
    },
    "lottie-ios": {
    "name": "lottie-ios",
    "url": "https://github.com/airbnb/lottie-ios",
    "version": "3.1.8"
    },
    "SwiftyJSON": {
    "name": "SwiftyJSON",
    "url": "https://github.com/SwiftyJSON/SwiftyJSON",
    "version": "5.0.0"
    },
    "vapor": {
    "name": "vapor",
    "url": "https://github.com/vapor/vapor",
    "version": "4.8.0"
    },
    "RxSwift": {
    "name": "RxSwift",
    "url": "https://github.com/ReactiveX/RxSwift",
    "version": "5.1.1"
    },
    "Hero": {
    "name": "Hero",
    "url": "https://github.com/HeroTransitions/Hero",
    "version": "1.5.0"
    },
    "SnapKit": {
    "name": "SnapKit",
    "url": "https://github.com/SnapKit/SnapKit",
    "version": "5.0.1"
    },
    "Kingfisher": {
    "name": "Kingfisher",
    "url": "https://github.com/onevcat/Kingfisher",
    "version": "5.14.0"
    },
    "MBProgressHUD": {
    "name": "MBProgressHUD",
    "url": "https://github.com/jdg/MBProgressHUD",
    "version": "1.2.0"
    },
    "IQKeyboardManager": {
    "name": "IQKeyboardManager",
    "url": "https://github.com/hackiftekhar/IQKeyboardManager",
    "version": "v6.5.0"
    },
    "realm-cocoa": {
    "name": "realm-cocoa",
    "url": "https://github.com/realm/realm-cocoa",
    "version": "v5.0.2"
    },
    "Carthage": {
    "name": "Carthage",
    "url": "https://github.com/Carthage/Carthage",
    "version": "0.34.0"
    },
    "SwiftLint": {
    "name": "SwiftLint",
    "url": "https://github.com/realm/SwiftLint",
    "version": "0.39.2"
    },
    "PromiseKit": {
    "name": "PromiseKit",
    "url": "https://github.com/mxcl/PromiseKit",
    "version": "6.13.0"
    },
    "Moya": {
    "name": "Moya",
    "url": "https://github.com/Moya/Moya",
    "version": "14.0.0"
    },
    "CocoaAsyncSocket": {
    "name": "CocoaAsyncSocket",
    "url": "https://github.com/robbiehanson/CocoaAsyncSocket",
    "version": "7.6.4"
    },
    "Eureka": {
    "name": "Eureka",
    "url": "https://github.com/xmartlabs/Eureka",
    "version": "5.2.1"
    },
    "folding-cell": {
    "name": "folding-cell",
    "url": "https://github.com/Ramotion/folding-cell",
    "version": "5.0.2"
    },
    "NVActivityIndicatorView": {
    "name": "NVActivityIndicatorView",
    "url": "https://github.com/ninjaprox/NVActivityIndicatorView",
    "version": "4.8.0"
    },
    "SkeletonView": {
    "name": "SkeletonView",
    "url": "https://github.com/Juanpe/SkeletonView",
    "version": "1.8.6"
    },
    "Quick": {
    "name": "Quick",
    "url": "https://github.com/Quick/Quick",
    "version": "v3.0.0"
    },
    "SwifterSwift": {
    "name": "SwifterSwift",
    "url": "https://github.com/SwifterSwift/SwifterSwift",
    "version": "5.2.0"
    },
    "ObjectMapper": {
    "name": "ObjectMapper",
    "url": "https://github.com/tristanhimmelman/ObjectMapper",
    "version": "4.2.0"
    },
    "IBAnimatable": {
    "name": "IBAnimatable",
    "url": "https://github.com/IBAnimatable/IBAnimatable",
    "version": "6.1.0"
    },
    "CryptoSwift": {
    "name": "CryptoSwift",
    "url": "https://github.com/krzyzanowskim/CryptoSwift",
    "version": "1.3.1"
    },
    "swift-package-manager": {
    "name": "swift-package-manager",
    "url": "https://github.com/apple/swift-package-manager",
    "version": "0.6.0"
    },
    "R.swift": {
    "name": "R.swift",
    "url": "https://github.com/mac-cain13/R.swift",
    "version": "v5.2.2"
    },
    "PureLayout": {
    "name": "PureLayout",
    "url": "https://github.com/PureLayout/PureLayout",
    "version": "v3.1.6"
    },
    "Kitura": {
    "name": "Kitura",
    "url": "https://github.com/IBM-Swift/Kitura",
    "version": "2.9.1"
    },
    "Cartography": {
    "name": "Cartography",
    "url": "https://github.com/robb/Cartography",
    "version": "4.0.0"
    },
    "SQLite.swift": {
    "name": "SQLite.swift",
    "url": "https://github.com/stephencelis/SQLite.swift",
    "version": "0.12.2"
    },
    "Reachability.swift": {
    "name": "Reachability.swift",
    "url": "https://github.com/ashleymills/Reachability.swift",
    "version": "v5.0.0"
    },
    "JTAppleCalendar": {
    "name": "JTAppleCalendar",
    "url": "https://github.com/patchthecode/JTAppleCalendar",
    "version": "8.0.3"
    },
    "ReSwift": {
    "name": "ReSwift",
    "url": "https://github.com/ReSwift/ReSwift",
    "version": "5.0.0"
    },
    "facebook-ios-sdk": {
    "name": "facebook-ios-sdk",
    "url": "https://github.com/facebook/facebook-ios-sdk",
    "version": "v7.0.0"
    },
    "SwiftGen": {
    "name": "SwiftGen",
    "url": "https://github.com/SwiftGen/SwiftGen",
    "version": "6.1.0"
    },
    "Starscream": {
    "name": "Starscream",
    "url": "https://github.com/daltoniam/Starscream",
    "version": "3.1.1"
    },
    "swift-nio": {
    "name": "swift-nio",
    "url": "https://github.com/apple/swift-nio",
    "version": "2.18.0"
    },
    "ViewAnimator": {
    "name": "ViewAnimator",
    "url": "https://github.com/marcosgriselli/ViewAnimator",
    "version": "2.7.0"
    },
    "SwiftDate": {
    "name": "SwiftDate",
    "url": "https://github.com/malcommac/SwiftDate",
    "version": "6.1.0"
    },
    "KeychainAccess": {
    "name": "KeychainAccess",
    "url": "https://github.com/kishikawakatsumi/KeychainAccess",
    "version": "v4.2.0"
    },
    "Macaw": {
    "name": "Macaw",
    "url": "https://github.com/exyte/Macaw",
    "version": "0.9.6"
    },
    "SwipeCellKit": {
    "name": "SwipeCellKit",
    "url": "https://github.com/SwipeCellKit/SwipeCellKit",
    "version": "2.7.1"
    },
    "Nuke": {
    "name": "Nuke",
    "url": "https://github.com/kean/Nuke",
    "version": "9.1.0"
    },
    "SwiftyStoreKit": {
    "name": "SwiftyStoreKit",
    "url": "https://github.com/bizz84/SwiftyStoreKit",
    "version": "0.16.0"
    },
    "SwiftyBeaver": {
    "name": "SwiftyBeaver",
    "url": "https://github.com/SwiftyBeaver/SwiftyBeaver",
    "version": "1.9.1"
    },
    "SwiftEntryKit": {
    "name": "SwiftEntryKit",
    "url": "https://github.com/huri000/SwiftEntryKit",
    "version": "1.2.3"
    }
    }
    163 changes: 163 additions & 0 deletions results.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,163 @@
    clone
    -----
    user system total real
    Alamofire 0.000136 0.000850 0.749258 ( 1.448588)
    Charts 0.000083 0.000521 3.489720 ( 7.009554)
    SDWebImage 0.000083 0.000522 0.518336 ( 1.374356)
    ReactiveCocoa 0.000084 0.000533 1.125409 ( 1.682766)
    lottie-ios 0.000080 0.000517 0.677848 ( 2.008858)
    SwiftyJSON 0.000081 0.000541 0.115584 ( 0.580434)
    vapor 0.000085 0.000532 0.724292 ( 1.157188)
    RxSwift 0.000080 0.000515 1.008959 ( 1.230171)
    Hero 0.000085 0.000542 0.528742 ( 1.768519)
    SnapKit 0.000081 0.000551 0.129149 ( 0.513823)
    Kingfisher 0.000084 0.000521 0.912013 ( 1.819731)
    MBProgressHUD 0.000084 0.000536 0.122328 ( 0.452931)
    IQKeyboardManager 0.000086 0.000530 0.632610 ( 1.380802)
    realm-cocoa 0.000086 0.000527 2.343979 ( 3.209463)
    Carthage 0.000084 0.000534 0.710062 ( 1.500694)
    SwiftLint 0.000099 0.000572 1.575219 ( 3.197901)
    PromiseKit 0.000084 0.000535 0.267489 ( 0.851714)
    Moya 0.000084 0.000536 0.604540 ( 1.918609)
    CocoaAsyncSocket 0.000081 0.000529 0.231591 ( 0.683557)
    Eureka 0.000085 0.000539 0.502792 ( 2.481602)
    folding-cell 0.000085 0.000545 0.343322 ( 1.333463)
    NVActivityIndicatorView 0.000114 0.000539 0.176368 ( 0.759250)
    SkeletonView 0.000086 0.000529 0.179957 ( 0.826394)
    Quick 0.000083 0.000530 0.199310 ( 1.765293)
    SwifterSwift 0.000081 0.000518 0.448863 ( 2.627493)
    ObjectMapper 0.000082 0.000536 0.142047 ( 0.598192)
    IBAnimatable 0.000082 0.000522 0.554057 ( 1.842749)
    CryptoSwift 0.000078 0.000525 0.391980 ( 0.820891)
    swift-package-manager 0.000087 0.000539 0.869737 ( 1.320884)
    R.swift 0.000084 0.000542 0.220084 ( 0.672758)
    PureLayout 0.000082 0.000522 0.112897 ( 0.474636)
    Kitura 0.000079 0.000507 0.317610 ( 0.805428)
    Cartography 0.000079 0.000511 0.104570 ( 0.481281)
    SQLite.swift 0.000087 0.000541 0.169530 ( 0.624040)
    Reachability.swift 0.000081 0.000537 0.073578 ( 0.400479)
    JTAppleCalendar 0.000081 0.000516 0.174830 ( 0.546251)
    ReSwift 0.000080 0.000556 0.222758 ( 0.825881)
    facebook-ios-sdk 0.000096 0.000544 1.267827 ( 3.875306)
    SwiftGen 0.000084 0.000528 1.407960 ( 2.657347)
    Starscream 0.000087 0.000535 0.146574 ( 0.570999)
    swift-nio 0.000082 0.000511 1.402005 ( 2.307524)
    ViewAnimator 0.000082 0.000537 0.213198 ( 1.231248)
    SwiftDate 0.000085 0.000517 0.621065 ( 1.530479)
    KeychainAccess 0.000083 0.000527 0.122294 ( 0.525966)
    Macaw 0.000086 0.000524 1.629218 ( 3.734845)
    SwipeCellKit 0.000079 0.000563 0.219207 ( 0.787884)
    Nuke 0.000084 0.000522 0.248210 ( 0.694805)
    SwiftyStoreKit 0.000092 0.000584 0.150986 ( 0.707731)
    SwiftyBeaver 0.000082 0.000546 0.116533 ( 0.615893)
    SwiftEntryKit 0.000084 0.000518 0.654047 ( 2.576422)


    shallow clone
    -------------
    user system total real
    Alamofire 0.000089 0.000987 0.181577 ( 1.276130)
    Charts 0.000099 0.000538 0.199058 ( 1.085956)
    SDWebImage 0.000085 0.000542 0.199057 ( 1.268511)
    ReactiveCocoa 0.000081 0.000538 0.101560 ( 0.747305)
    lottie-ios 0.000088 0.000581 0.302069 ( 1.390870)
    SwiftyJSON 0.000086 0.000539 0.099870 ( 0.649720)
    vapor 0.000085 0.000549 0.092695 ( 0.667052)
    RxSwift 0.000088 0.000557 0.208210 ( 1.160036)
    Hero 0.000086 0.000537 0.434481 ( 1.937651)
    SnapKit 0.000088 0.000566 0.098053 ( 0.615319)
    Kingfisher 0.000085 0.000543 0.170360 ( 1.069342)
    MBProgressHUD 0.000088 0.000552 0.073888 ( 0.597525)
    IQKeyboardManager 0.000084 0.000525 0.126740 ( 0.866729)
    realm-cocoa 0.000090 0.000533 0.241952 ( 1.360770)
    Carthage 0.000085 0.000570 0.268701 ( 1.323958)
    SwiftLint 0.000102 0.000580 0.141727 ( 1.198796)
    PromiseKit 0.000084 0.000533 0.072695 ( 0.633645)
    Moya 0.000085 0.000563 0.085157 ( 0.674803)
    CocoaAsyncSocket 0.000087 0.000538 0.102473 ( 0.737209)
    Eureka 0.000090 0.000554 0.400073 ( 1.611943)
    folding-cell 0.000090 0.000541 0.324667 ( 2.043012)
    NVActivityIndicatorView 0.000104 0.000549 0.088304 ( 0.630883)
    SkeletonView 0.000083 0.000536 0.103810 ( 0.706556)
    Quick 0.000084 0.000534 0.088923 ( 0.852848)
    SwifterSwift 0.000087 0.000551 0.232277 ( 1.370784)
    ObjectMapper 0.000085 0.000532 0.105336 ( 0.671433)
    IBAnimatable 0.000084 0.000544 0.202773 ( 1.123856)
    CryptoSwift 0.000079 0.000555 0.074655 ( 0.719163)
    swift-package-manager 0.000082 0.000546 0.220772 ( 1.057774)
    R.swift 0.000087 0.000575 0.128693 ( 0.838331)
    PureLayout 0.000089 0.000571 0.070046 ( 0.621298)
    Kitura 0.000086 0.000550 0.113094 ( 0.813256)
    Cartography 0.000085 0.000542 0.125957 ( 0.660371)
    SQLite.swift 0.000085 0.000540 0.068487 ( 0.618180)
    Reachability.swift 0.000083 0.000540 0.085587 ( 0.559912)
    JTAppleCalendar 0.000083 0.000531 0.109751 ( 0.794185)
    ReSwift 0.000087 0.000694 0.093764 ( 0.679971)
    facebook-ios-sdk 0.000090 0.000547 0.280746 ( 1.594408)
    SwiftGen 0.000082 0.000524 0.416917 ( 2.401701)
    Starscream 0.000085 0.000553 0.060371 ( 0.638762)
    swift-nio 0.000086 0.000537 0.133366 ( 1.033090)
    ViewAnimator 0.000086 0.000558 0.181537 ( 1.091609)
    SwiftDate 0.000091 0.000589 0.094182 ( 0.739587)
    KeychainAccess 0.000097 0.000566 0.073815 ( 0.635560)
    Macaw 0.000084 0.000525 0.121431 ( 0.672766)
    SwipeCellKit 0.000085 0.000527 0.171877 ( 0.888319)
    Nuke 0.000086 0.000547 0.096800 ( 0.702987)
    SwiftyStoreKit 0.000087 0.000535 0.078165 ( 0.649689)
    SwiftyBeaver 0.000101 0.000731 0.080998 ( 0.603176)
    SwiftEntryKit 0.000085 0.000556 0.123608 ( 0.810066)


    curl + unzip
    ------------
    user system total real
    Alamofire 0.000083 0.000578 0.047543 ( 0.438428)
    Charts 0.000085 0.000475 0.073209 ( 0.673222)
    SDWebImage 0.000085 0.000493 0.070839 ( 0.963911)
    ReactiveCocoa 0.000085 0.000486 0.034548 ( 0.519555)
    lottie-ios 0.000082 0.000471 0.121803 ( 1.087244)
    SwiftyJSON 0.000081 0.000483 0.028744 ( 0.588119)
    vapor 0.000093 0.000507 0.031894 ( 0.657963)
    RxSwift 0.000082 0.000492 0.041618 ( 0.788529)
    Hero 0.000096 0.000509 0.249148 ( 1.531092)
    SnapKit 0.000097 0.000492 0.028509 ( 0.394953)
    Kingfisher 0.000081 0.000472 0.055677 ( 0.929202)
    MBProgressHUD 0.000085 0.000482 0.035029 ( 0.642001)
    IQKeyboardManager 0.000081 0.000480 0.052291 ( 0.749722)
    realm-cocoa 0.000083 0.000476 0.049941 ( 0.672720)
    Carthage 0.000080 0.000504 0.105637 ( 1.503029)
    SwiftLint 0.000080 0.000497 0.039125 ( 0.636095)
    PromiseKit 0.000080 0.000476 0.030474 ( 0.447122)
    Moya 0.000079 0.000500 0.033000 ( 0.475439)
    CocoaAsyncSocket 0.000079 0.000500 0.036218 ( 0.640219)
    Eureka 0.000082 0.000500 0.138553 ( 1.383653)
    folding-cell 0.000124 0.000514 0.161265 ( 2.136727)
    NVActivityIndicatorView 0.000095 0.000522 0.038232 ( 0.561053)
    SkeletonView 0.000083 0.000507 0.049915 ( 0.623630)
    Quick 0.000084 0.000566 0.039729 ( 0.498851)
    SwifterSwift 0.000080 0.000518 0.066981 ( 1.434170)
    ObjectMapper 0.000080 0.000496 0.028871 ( 0.523576)
    IBAnimatable 0.000078 0.000479 0.081879 ( 1.143258)
    CryptoSwift 0.000081 0.000529 0.031622 ( 0.535472)
    swift-package-manager 0.000077 0.000480 0.040918 ( 0.593177)
    R.swift 0.000079 0.000483 0.047464 ( 0.541360)
    PureLayout 0.000079 0.000480 0.031533 ( 0.661279)
    Kitura 0.000084 0.000532 0.041489 ( 0.598221)
    Cartography 0.000081 0.000472 0.037126 ( 0.585534)
    SQLite.swift 0.000079 0.000483 0.033331 ( 0.591542)
    Reachability.swift 0.000079 0.000498 0.028668 ( 0.518653)
    JTAppleCalendar 0.000081 0.000517 0.027403 ( 0.464183)
    ReSwift 0.000095 0.000546 0.043128 ( 0.653240)
    facebook-ios-sdk 0.000079 0.000481 0.080229 ( 1.435391)
    SwiftGen 0.000110 0.000488 0.066499 ( 2.195309)
    Starscream 0.000094 0.000525 0.029585 ( 0.442313)
    swift-nio 0.000081 0.000515 0.041171 ( 0.601788)
    ViewAnimator 0.000083 0.000513 0.109572 ( 0.990973)
    SwiftDate 0.000080 0.000490 0.037179 ( 0.527112)
    KeychainAccess 0.000080 0.000516 0.034888 ( 0.501061)
    Macaw 0.000083 0.000501 0.037454 ( 0.574375)
    SwipeCellKit 0.000080 0.000518 0.079586 ( 0.855079)
    Nuke 0.000080 0.000488 0.044444 ( 0.539984)
    SwiftyStoreKit 0.000078 0.000497 0.037934 ( 0.585002)
    SwiftyBeaver 0.000079 0.000503 0.028810 ( 0.484051)
    SwiftEntryKit 0.000080 0.000510 0.039134 ( 0.602307)