0Pricing
Swift Academy · Lekcja

Pamięć podręczna układu i wydajność

Używanie pamięci podręcznej układu w celu zwiększenia wydajności.

Pamięć podręczna układu i wydajność to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 4 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.

Dlaczego pamięć podręczna układu?

SwiftUI może wielokrotnie wywoływać sizeThatFits i placeSubviews podczas jednego przebiegu układu.

Jeśli obliczenia są kosztowne, pamięć podręczna pozwala wykonać je raz i ponownie wykorzystać wynik, unikając powtarzania pracy.

Powiązany typ Cache

Protokół Layout ma powiązany typ Cache, którego domyślną wartością jest Void. Zdefiniuj własną strukturę do przechowywania wstępnie obliczonych wyników.

struct FlowLayout: Layout {
    struct CacheData {
        var sizes: [CGSize] = []
    }
    typealias Cache = CacheData
}

makeCache

Zaimplementuj makeCache(subviews:), aby utworzyć początkową pamięć podręczną. SwiftUI wywołuje tę metodę raz przed metodami układu, zapewniając miejsce na wykonanie wstępnych pomiarów.

func makeCache(subviews: Subviews) -> CacheData {
    let sizes = subviews.map { $0.sizeThatFits(.unspecified) }
    return CacheData(sizes: sizes)
}

Odczytywanie pamięci podręcznej

Metody układu otrzymują teraz cache jako parametr inout. Odczytuj wstępnie obliczone wartości zamiast ponownie mierzyć każde dziecko.

func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout CacheData) -> CGSize {
    let height = cache.sizes.map(\.height).max() ?? 0
    let width = cache.sizes.reduce(0) { $0 + $1.width }
    return CGSize(width: width, height: height)
}

updateCache

Gdy zbiór podwidoków się zmienia, SwiftUI wywołuje updateCache(_:subviews:). Domyślna implementacja odbudowuje pamięć podręczną za pomocą makeCache, ale można ją zastąpić, aby aktualizować pamięć przyrostowo.

func updateCache(_ cache: inout CacheData, subviews: Subviews) {
    cache.sizes = subviews.map { $0.sizeThatFits(.unspecified) }
}

Kiedy wywoływane jest updateCache

updateCache wykonuje się, gdy zmienia się liczba lub tożsamość podwidoków, a nie przy każdej zmianie geometrii. W pamięci podręcznej przechowuj tylko dane zależne od podwidoków, a nie od proponowanego rozmiaru.

Buforowanie tylko danych niezależnych od propozycji

Częstym błędem jest buforowanie wyników zależnych od proponowanego rozmiaru. Propozycja może się zmieniać między wywołaniami, dlatego wyniki zależne od rozmiaru należy ponownie obliczać, a nie bezkrytycznie przechowywać w pamięci podręcznej.

// OK to cache: intrinsic child sizes
// NOT OK to cache: row breaks (depend on proposed width)

Buforowanie rozmiarów intrinsic

Bezpieczny wzorzec polega na buforowaniu kosztownych wyników sizeThatFits(.unspecified), a następnie wykonywaniu niedrogich obliczeń zawijania przy każdym wywołaniu z użyciem bieżącej propozycji.

struct CacheData { var intrinsic: [CGSize] = [] }
// wrapping uses cache.intrinsic + current maxWidth

Unikanie przedwczesnej optymalizacji

W przypadku kilku prostych dzieci pomiar jest tani, a pamięć podręczna zwiększa złożoność. Najpierw wykonaj profilowanie; sięgaj po pamięć podręczną dopiero wtedy, gdy pomiary są rzeczywiście kosztowne (tekst, obrazy, zagnieżdżone układy).

Pamięć podręczna a semantyka wartości

Pamięć podręczna jest własnością SwiftUI i jest przekazywana jako inout. Powinna być zwykłym typem wartości, bez odwołań do widoków, aby SwiftUI mogło bezpiecznie zarządzać jej cyklem życia.

struct CacheData {
    var sizes: [CGSize] // value types only
}

Mierzenie korzyści

Użyj SwiftUI Instrument lub prostych liczników, aby potwierdzić, że pamięć podręczna rzeczywiście zmniejsza liczbę wywołań pomiarów. Optymalizacja bez pomiarów to zgadywanie.

Szybkie sprawdzenie: pamięć podręczna układu

Sprawdź swoją wiedzę na temat buforowania układu.

Podsumowanie: pamięć podręczna układu i wydajność

Powiązany typ Cache protokołu Layout, tworzony przez makeCache i odświeżany przez updateCache, przechowuje kosztowne obliczenia niezależne od propozycji, takie jak intrinsic rozmiary dzieci.

Niedrogie obliczenia zależne od propozycji wykonuj przy każdym wywołaniu. Pamięć podręczną przechowuj jako typ wartości bez odwołań, unikaj przedwczesnego buforowania i przed dodaniem złożoności zweryfikuj korzyści za pomocą profilowania.

Często zadawane pytania

Czy lekcja „Pamięć podręczna układu i wydajność” jest bezpłatna?

Tak — pełny tekst „Pamięć podręczna układu i wydajność” 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 „Pamięć podręczna układu i wydajność”?

Używanie pamięci podręcznej układu w celu zwiększenia wydajności. Ć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 4 z 4.

Ile czasu zajmuje lekcja „Pamięć podręczna układu i wydajność”?

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

  1. Podstawy protokołu Layout
  2. Mierzenie podwidoków
  3. Budowanie układu przepływowego
  4. Pamięć podręczna układu i wydajność
← Powrót do Swift Academy