タグ

ブックマーク / rizumita.medium.com (3)

  • Swiftのfor inとmapやreduceの速度を比べてみる

    きしかわせんせいからfor inとmapなどを比べてみるというリクエストをいただいたので、早速やってみたいと思います。 ちなみにきしかわせんせい曰くSwift2や3ではfor inの方が速かったそうです。 今回の環境はSwift version 4.0.3とiPhone Xの組み合わせです。 for inとmapを比べてみます。 コードは以下のようになっています。testメソッドのクロージャ引数内の実行時間を出力します。Rangeから配列へ射影しますが、そのままコピーしているだけです。できるだけ簡素な実装にしています。 まずは-Ononeで最適化無しです。 Execution time - for in: 0.084015965461731 Execution time - map: 2.84733605384827for inが圧倒的です。 次に-O -whole-module-opti

  • Swiftでnilか否かで処理を分岐するときのOptional Bindingとnil比較の速度を検証してみた

    というつぶやきを拝見しました。Optionalに値が入っている場合の分岐の速度ということですね。もう少し詳細に調べてみました。 以下のコードを実機iPhoneで動かしてみます。 debug設定、つまり-OnoneでコンパイルしてrunSpeedTestsを実行すると Execution time - Optional Binding: 0.802894949913025 Execution time - eq not nil: 8.99928903579712 Execution time - switch: 0.802114963531494このような結果になりました。nilとの比較ではOptional Bindingよりも10倍以上の時間がかかっています。Swiftは!=は内部でswitchで検査しているようです。しかしswitchは最も速いです(何度実行してもほぼ最速)。となると!=

    Watson
    Watson 2018/01/30
  • XcodeのRun Scriptフェーズを無効にしてビルド時間を短縮する(スクリプト付き)

    私が担当しているiOSアプリをXcodeでビルドすると、CarthageやCocoaPodsであわせて50近くフレームワークを利用しているためフレームワークをコピーするRun Scriptフェーズで時間がかかっていました。計測したところコンパイルが必要なくても49秒かかっていました。 そのRun Scriptフェーズを実行しないようにして、ビルド時間が35秒短縮されました。それらのRun Scriptフェーズは一度実行すればDerivedDataを削除したりフレームワークを追加・削除したりしない限り実行する必要はありません。ですのでそのフェーズを実行しないように設定することでビルド時間を短縮することが出来ました。(CocoaPods1.2.0ではCode Signingをパラレルに実行できるようになるようなので、効果は小さくなると思いますが) 具体的にはRun ScriptフェーズのRun

    Watson
    Watson 2016/12/13
  • 1