WWDC 정리/WWDC 2025 정리
[WWDC2025] SwiftUI 최적화 프로파일링 - Optimize SwiftUI performance with Instruments (3, Render Loop 개념, 화면이 끊기는 원리, hitch)
jake-kim
2025. 9. 10. 01:35
프레임 드랍(Hitch)이 일어나는 과정 (Render Loop)
- 앱은 특정 싸이클마다 깨어나면서 이벤트를 처리
- 아래처럼 싸이클마다 클릭 이벤트를 인식하고 UI를 업데이트
- 이때 변경된 SwiftUI View의 body 프로퍼티를 실행함

- 이 UI를 업데이트 하는 과정들은 각 주기 프레임 데드라인전에 완료되어야함
- 즉 데드라인 전에 UI가 업데이트 되는 것
- 렌더링 된 출력은 해당 데드라인 직후에 화면에 표출됨 (주의: 첫번째 프레임에서 내부적인 UI 관련 업데이트를 하고 화면에 보이는 것은 다음 프레임에서 수행)

- 아래와 같은 프레임 드랍 케이스의 Render Loop는?
- UI 업데이트 부분이 프레임 데드라인 후에 실행되었음
- 이미 두 번째 프레임에서는 첫번째 UI 업데이트를 썼으므로 다음 업데이트는 3번째 프레임에서 시작해야함

- 아래 화면과 같이 2번째 loop에서 `Nothing to render!`됨
- 주의) 첫번째 프레임에서 내부적인 UI 관련 업데이트를 하고 화면에 보이는 것은 다음 프레임에서 수행하기 때문에 두번째 프레임에서 화면에 아무것도 업데이트가 안되는것

- 그럼 늦게 UI Update된 프레임은 화면에 언제 그려지는 걸까?
- 3번째 프레임도 아님: 3번째 프레임에서는 Render 하는것에 자원을 사용하므로 결국 4번째 프레임에 그려짐

SwiftUI의 뷰 업데이트
- 위에서 알아본대로 Render Loop를 이해하여 SwiftUI의 Body부분에서 View Updates가 많이 일어나면 끊김 현상이 발생할 수 있다는 것을 이해
- Instrument를 통해 이런 부분을 발견하고 개선하는것이 필요
(... View Update Count를 보고 업데이트가 많이 일어나는 부분을 분석하는 내용은 다음 글에서 계속)
* 참고