美文网首页
Swift 编译速度优化

Swift 编译速度优化

作者: 烟雨痕 | 来源:发表于2021-02-24 15:57 被阅读0次

    代码首先要规范

    一、查看代码编译时间


    参考链接:https://www.jianshu.com/p/71bbc843abdb

    1.添加编译设置-Xfrontend -debug-time-function-bodies。

    image.png

    2 Xcode clean -> CMD + B。

    3.在文件times.txt查看耗时代码
    xcodebuild -workspace SwiftCompileTime.xcworkspace -scheme SwiftCompileTime clean build OTHER_SWIFT_FLAGS="-Xfrontend -debug-time-function-bodies" | grep .[0-9]ms | grep -v ^0.[0-9]ms | sort -nr > culprits.txt

    二、耗时代码修改:

    1.最好不要类型推断

    var x = 10
    修改成
    var x: Int = 10
    

    2.数组操作

    let result = arr1 + arr2
    修改成
    var result = arr1
    result.appendContentsOf(arr2)
    

    3.可变类型,最好不要在计算公式中出现可选类型。

    let x2: Int = (x1 ?? 0) + 10
    修改成
    let temp: Int =  x1 ?? 0
    let x2: Int = temp + 10
    
    let label = UILabel()
    label.text = str ?? ""
    改成
    let temp: String = str ?? ""
    label.text = temp
    

    4.设置frame, ScreenW:屏幕宽度, 少出现多运算符混合计算

    let x:  CGFloat = ScreenW -  label.frame.maxX - 10.0 * 2.0 - 20.0 / 1.0 - 15.0
    改成
    let x:  CGFloat = ScreenW - label.frame.maxX - 45.0
    或者改成Marsonry 布局。
    
    1. if, 不要在if 条件中出现可选类型
    if  x ?? 0 > 0 {
    }
    改成
    let tempX: Int = x ?? 0
    if tempX > 0 {
    }
    
    1. CGFloat 不可以嵌套CGFloat转换数据类型。
    let x1: Int = 10
    let x: CGFloat = CGFloat( CGFloat(x1) + 10 + frame.x)
    改成
    let x: CGFloat =  CGFloat(x1) + 10.0 + frame.x
    
    let x2: CGFloat  = 10(隐式转换)
    改成
    let x2: CGFloat  = 10.0
    
    1. 复杂判断减少使用三目运算符, 如果使用,不要出现可选类型
    let x: Int = (x1 ?? 0) > x2 ?  x1 : x2
    改成
    let x: Int = x1 ?? 0
    if x1 < x2 {
      x = x2
    } 
    
    1. 高阶函数使用
    let arr1 = arr.map { "\($0)" }
    改成
    let arr1 = arr.map { value -> String in
          return "\(value)"
     }
    

    9.复杂集合

    let value = [
            "key1" : [
                ["key2": [1, 2, 3, 4, 5]],
                ["key3": [ ]],
                ["key4": [ ["A": [ 1 ]]]]
            ]
        ]
    改成
    let value = [
            "key1" : [
                ["key2": [1, 2, 3, 4, 5]] as [String: [Int]],
                ["key3": [ ]] as [String: [Int]],
                ["key4": [ ["key5": [ 1 ]] as [String: [Int]]]] as [String : [[String: [Int]]]]
            ]
        ]
    

    二、私有库二进制


    参考:https://juejin.cn/post/6890419459639476237
    https://www.jianshu.com/p/5338bc626eaf

    相关文章

      网友评论

          本文标题:Swift 编译速度优化

          本文链接:https://www.haomeiwen.com/subject/akjsfltx.html