iOS 응용 (swift)
[iOS - swift] 3. UI 성능 분석 - Commit Hitch를 줄이는 UI 성능 최적화 프로그래밍
jake-kim
2023. 1. 29. 22:18
1. UI 성능 분석 - Render Loop 이해하기 (Commit, Layout, Display, Prepare, Commit)
2. UI 성능 분석 - Instrument의 Animation Hitches 사용하여 UI 성능 개선하기
3. UI 성능 분석 - Commit Hitch를 줄이는 UI 성능 최적화 프로그래밍 <
뷰를 가볍게 사용하기
* 참고 애플 영상 9분10초~
- draw(rect:) 사용 지양
- draw(rect:)는 CPU를 사용하고, CALayer는 GPU를 가속하여 사용하기 때문에 main thread 부담이 적은 CALayer를 사용할 것
- draw(rect:)를 사용할 경우, 별도로 성능 측정을 수행할 것
- draw(rect:)가 필요없다면 오버라이딩으로 선언도 하지 말것
- 아무것도 안하고 draw를 override 하기만해도 더 많은 메모리와 시간을 소요
final class MyView: UIView {
override func draw(_ rect: CGRect) {
super.draw(rect)
}
}
- view 재사용하기
- 대표적인 예로 cell에서 reuseForPrepare으로부터 뷰를 removeFromSubview하지 말고, 단순히 hidden하거나 label이면 문자열을 nil을 대입하여 사용
- 뷰를 안보이게끔 할때는 remove보다는 isHidden을 사용
- isHidden은 remove보다 비용이 작은 작업
비용이 큰걸 줄이기
- layoutIfNeeded()보다 setNeedsLayout()을 사용할 것
- 2번 글에서 알아본대로 layoutIfNeed은 commit transaction이 지연되게하고 hitch를 유발
- constraint를 최소한만 사용할 것
- constraint가 많아지면 연산이 많이되어 성능 저하에 요인
- 자신의 뷰만 invalidate할 것
- 부모 뷰의 레이아웃을 invalidate하게 되면 재귀적으로 레이아웃 계산이 이루어지게 되어 비용이 비싼 작업
* 참고