Minimalizowanie ponownej ewaluacji body
Ograniczanie niepotrzebnego ponownego obliczania widoków.
Minimalizowanie ponownej ewaluacji body to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
body jest często obliczane ponownie
SwiftUI wywołuje body widoku za każdym razem, gdy zmieniają się jego dane wejściowe. Ciężki lub nadmiernie powiązany body jest obliczany zbyt często, co pogarsza wydajność.
Co wywołuje ponowną ocenę
body jest wykonywane ponownie, gdy zmieni się dowolny odczytywany przez nie element @State, @Binding, obserwowany obiekt lub wartość środowiska — albo gdy rodzic przekaże nowe wartości.
struct Row: View {
let title: String // changes -> body re-runs
var body: some View { Text(title) }
}Ogranicz zakres obserwacji
Jeśli widok odczytuje cały duży model, każda zmiana tego modelu powoduje ponowne wykonanie body. Przekazuj tylko konkretne wartości, których widok potrzebuje.
// Instead of passing the whole model:
struct Price: View {
let amount: Decimal // narrow input
var body: some View { Text(amount, format: .currency(code: "USD")) }
}Dziel duże widoki
Podziel ogromne body na małe podwidoki. SwiftUI ponownie ocenia tylko te podwidoki, których dane wejściowe rzeczywiście się zmieniły, a nie cały ekran.
struct Screen: View {
var body: some View {
VStack {
Header() // re-runs only if its inputs change
ItemList()
Footer()
}
}
}Observable i śledzenie na poziomie pól
W przypadku makra @Observable SwiftUI śledzi dokładne właściwości odczytywane przez widok. Widok, który odczytuje tylko model.name, ignoruje zmiany model.count.
@Observable final class Model {
var name = ""
var count = 0
}
// A view reading only name won’t re-run when count changesUnikaj pracy w body
body powinno tanio opisywać interfejs użytkownika. Kosztowne obliczenia (sortowanie, filtrowanie) powinny znajdować się w modelu lub buforowanej właściwości, a nie być wykonywane ponownie przy każdym wywołaniu body.
// Bad: sort inside body (runs every recompute)
// Good: sort once in the model, expose sorted arrayStabilne domknięcia i dane wejściowe
Przekazywanie nowo utworzonej tablicy lub domknięcia przy każdym renderowaniu może uniemożliwić SwiftUI skuteczne sprawdzanie równości. Przenieś stabilne wartości wyżej, aby dane wejściowe były równe podczas kolejnych obliczeń.
// Hoist constants out of body
private let columns = [GridItem(.flexible())]Uważaj na kosztowne inicjalizatory
Metoda init widoku może być wykonywana wiele razy. Unikaj umieszczania w niej kosztownych operacji; SwiftUI często tworzy wartości widoków, nawet jeśli ich nie renderuje.
struct Card: View {
init(_ item: Item) { /* keep this trivial */ }
var body: some View { Text("Card") }
}Odczyty środowiska powodują aktualizacje
Odczyt wartości środowiska zapisuje widok do jej obserwowania. Odczytuj wartości środowiska tylko tam, gdzie są potrzebne, w najmniejszym możliwym podwidoku, aby ograniczyć zakres ponownej oceny.
@Environment(\.colorScheme) private var schemeKontenery leniwe
Używaj LazyVStack/LazyHStack i List, aby wiersze znajdujące się poza ekranem nie były tworzone, dopóki nie okażą się potrzebne. Ogranicza to liczbę wywołań body w przypadku dużych kolekcji.
ScrollView {
LazyVStack {
ForEach(items) { RowView(item: $0) }
}
}Najpierw mierz, potem optymalizuj
Nie zgaduj, które body jest wąskim gardłem. Użyj SwiftUI Instrument, aby znaleźć widoki z dużą liczbą ocen body, a następnie zastosuj w nich te techniki.
Szybkie sprawdzenie: ponowna ocena
Sprawdź swoją wiedzę na temat ponownej oceny body.
Podsumowanie: ograniczanie ponownej oceny body
Body jest wykonywane ponownie, gdy zmieniają się jego dane wejściowe, dlatego przekazuj wąskie zakresy wartości, dziel duże widoki na małe podwidoki i korzystaj ze śledzenia na poziomie pól zapewnianego przez @Observable. Dbaj o to, aby body i inicjalizatory były niedrogie, przenoś stabilne dane wejściowe wyżej, ograniczaj odczyty wartości środowiska i używaj leniwych kontenerów dla dużych kolekcji.
Przed optymalizacją zawsze potwierdzaj występowanie wąskich gardeł za pomocą SwiftUI Instrument.
Często zadawane pytania
Czy lekcja „Minimalizowanie ponownej ewaluacji body” jest bezpłatna?
Tak — pełny tekst „Minimalizowanie ponownej ewaluacji body” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Minimalizowanie ponownej ewaluacji body”?
Ograniczanie niepotrzebnego ponownego obliczania widoków. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Minimalizowanie ponownej ewaluacji body”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Zrozumienie tożsamości widoków
- Minimalizowanie ponownej ewaluacji body
- Widoki Equatable i zakres @State
- Profilowanie za pomocą instrumentu SwiftUI