각 Swift 메소드의 컴파일 시간을 측정하여 구축 시간 단축
전체 구축 시간 측정
우선 전체 구축에 얼마나 걸릴지 측정했다.
터미널에서 다음 명령을 실행하여 Xcode에서 구축하는 데 걸리는 시간을 표시합니다.
defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
이 작업을 수행하여 Xcode를 다시 시작합니다.정리 후 구축을 진행할 때 다음과 같이 구축 시간을 표시합니다.샘플 응용 프로그램이기 때문에 4.324초입니다.이 구축 시간이 긴 상황에서 모든 파일, 방법의 시간을 측정한다.
각 파일의 컴파일 시간 측정
(이후 설명한 모든 방법의 측정 방법도 모든 파일의 시간을 얻을 수 있기 때문에 이 항목은 건너뛰어도 문제없다)
모든 파일의 컴파일 시간을 측정하기 위해 xctool을 사용합니다.프로젝트 루트 폴더에서 다음 명령을 실행합니다.
xctool -scheme SchemeName -jobs 1 clean build >> build.txt
Workspace를 사용하는 경우 추가-workspace ProjectName.xcworkspace
됩니다.(SchemeName과 ProjectName은 각각 프로젝트의 이름을 지정합니다.)완성 후 빌드.txt가 생성되었습니다.build.txt에서
~ Compile ViewController.swift (3314 ms)
~ Compile AppDelegate.swift (290 ms)
이러한 컴파일링 시간이 기록되어 있기 때문에 이 파일을 텍스트 처리하여 파일 이름과 시간을 추출하여 시간 내림차순으로 정렬하면 컴파일링에 시간이 필요한 파일을 알 수 있습니다.시간이 필요한 서류를 판명했다.그 파일의 어느 부분에 시간이 걸리는지 정보를 원하기 때문에 모든 방법의 번역 시간을 측정합니다.
모든 방법의 번역 시간을 측정하다
각 메서드와 속성의 컴파일 시간을 측정하기 위해 먼저
-Xfrontend -debug-time-function-bodies
를 Xcode에서 측정하고자 하는 대상 건물에 설정된 Other Swift Flags 에 추가합니다.그리고 Xcode로 정리한 후에 구축하거나 모든 파일의 상황과 같다
xctool -scheme SchemeName -jobs 1 clean build >> build_in_detail.txt
집행그래서 이 일지에서 다음과 같은 정보를 얻는다.
--------------------------------------------------------------------------------
~ Compile ViewController.swift (513 ms)
--------------------------------------------------------------------------------
18.5ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:13:14 @objc get {}
0.1ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:13:14 @objc set {}
0.2ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:5:19 @objc override func viewDidLoad()
0.1ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:9:19 @objc override func didReceiveMemoryWarning()
12.5ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:17:10 @objc func createArray()
3.4ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:22:10 @objc func createDictionary()
0.0ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:3:7 @objc deinit
0.3ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:3:40 @objc @objc override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)
0.2ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:3:40 @objc @objc required override init?(coder aDecoder: NSCoder)
이것은 다음 파일의 구축 결과입니다.import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
lazy var strings: [String] = {
return ["test"]
}()
func createArray() {
let array = ["1", 2, 3.0, CGFloat(4.0)]
print(array)
}
func createDictionary() {
let dict = ["key1" : "1", "key2" : 2]
print(dict)
}
}
13줄의lazy varstrings 속성은 18.5ms를 소비합니다.17행의createArray 방법은 12.5ms를 소비합니다.이 예에서 결코 느리지는 않지만, 배열된 유형의 인쇄를 하지 않으면 매우 긴 시간이 걸릴 수 있다.
따라서 아래와 같이 타자 인쇄를 더해 다시 구축해 보자.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
lazy var strings: [String] = {
let result: [String] = ["test"]
return result
}()
func createArray() {
let array: [AnyObject] = ["1", 2, 3.0, CGFloat(4.0)]
print(array)
}
func createDictionary() {
let dict = ["key1" : "1", "key2" : 2]
print(dict)
}
}
결과는 다음과 같다.--------------------------------------------------------------------------------
~ Compile ViewController.swift (493 ms)
--------------------------------------------------------------------------------
1.3ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:13:34 (closure)
2.6ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:13:14 @objc get {}
0.1ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:13:14 @objc set {}
0.1ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:5:19 @objc override func viewDidLoad()
0.1ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:9:19 @objc override func didReceiveMemoryWarning()
3.8ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:18:10 @objc func createArray()
8.3ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:23:10 @objc func createDictionary()
0.0ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:3:7 @objc deinit
0.2ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:3:40 @objc @objc override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)
0.2ms /Users/username/Desktop/DurationSample/DurationSample/ViewController.swift:3:40 @objc @objc required override init?(coder aDecoder: NSCoder)
13줄의lazy varstrings는 1.3ms로 단축되었다.또한createArray 방법도 3.8ms로 단축되었다.이렇게 하면 모든 구축 전체 파일, 모든 방법의 시간을 측정함으로써 구축 시간의 문제점을 파악하고 수정하기 쉽다.번역에 시간이 걸리는 원인은 대부분 형 추리이기 때문에 수조와 사전에 타자를 치면 번역 시간을 단축시킬 수 있다.
Reference
이 문제에 관하여(각 Swift 메소드의 컴파일 시간을 측정하여 구축 시간 단축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rizumita/items/913b05d799b3712260f6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)