This commit addresses multiple SwiftUI performance bottlenecks identified
through code analysis, focusing on view rendering efficiency, list
performance, and memory usage optimization.
Key improvements:
- HomeView: Optimize async task management using structured concurrency
with async let to handle multiple Defaults updates in a single task
- VideoCell: Remove GeometryReader from VideoCellThumbnail to eliminate
layout thrashing; change @ObservedObject to computed property for shared
ThumbnailsModel
- ThumbnailView: Cache URL extension computation in init() instead of
recalculating on every body evaluation
- FavoriteItemView: Replace filter().prefix() with early-exit loop and
capacity reservation for significant performance gain on large lists
- ContentItemView: Optimize FetchRequest creation with direct predicate
construction only for video items, empty predicate for others
- VideoPlayerView: Fix playerSize didSet trigger by moving
updateSidebarQueue() calls to explicit onChange/onAppear handlers
- FeedView: Replace .unique() with Set-based deduplication for O(n)
performance and reduced allocations
- VerticalCells: Remove expensive sorting on every redraw; items should
be pre-sorted from source
These optimizations follow SwiftUI best practices by minimizing expensive
computations in view bodies, caching computed values, using efficient data
structures, and avoiding unnecessary redraws and layout passes.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- ThumbnailsModel optionally returns the quality
- Have constants for 4:3 and 16:9 aspect ratio
- Add high quality options for thumbnails
- Rename Highest quality to Best quality
- make 4:3 thumbnails fill the VideoCell
- use .maxes instead of .maxresdefault (the latter sometimes returns white images)
Signed-off-by: Toni Förster <toni.foerster@gmail.com>