Start with a reproducible slow interaction and measure it on a representative device. SwiftUI performance work is more effective when tied to observed behaviour rather than assumptions about the framework.
1. Expensive work during view updates
SwiftUI updates views according to their dependencies; not every state change updates every view. Keep expensive synchronous work out of body evaluation. Move preparation to an appropriate model or asynchronous task, and cache only when inputs and invalidation are clear. A computed property is not automatically a cache.
2. Unstable identity
Use stable identifiers for dynamic collections. Changing identity unnecessarily can recreate state and increase work. Check how sorting, filtering and replacement affect the IDs used by ForEach.
3. Too much work per visible item
Lazy containers defer some creation, but they do not make expensive cells free. Check image decoding, layout and data transformations. Reduce unnecessary dependencies and measure the interaction again after each change.
Make results reviewable
Record the device, OS, dataset and interaction used for the baseline. Share a short video and the profiling results so the team can reproduce the change and detect regressions.
Sources and further reading
Apple: Demystify SwiftUI performance ↗