Swift Academy · Oppitunti

Asetteluvälimuisti ja suorituskyky

Käytä asetteluvälimuistia tehokkuuden parantamiseen.

Oppitunti 4/413 vaihetta

Asetteluvälimuisti ja suorituskyky on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Miksi käyttää asettelun välimuistia

SwiftUI saattaa kutsua metodeja sizeThatFits ja placeSubviews useita kertoja yhden asetteluvaiheen aikana.

Jos laskentanne on kallista, välimuistin avulla voitte laskea tulokset kerran ja käyttää niitä uudelleen, jolloin toistuva työ vältetään.

Välimuistin associated type

Layout-protokollalla on Cache-niminen associated type, jonka oletusarvo on Void. Määrittäkää oma tietorakenteenne esilaskettujen tulosten tallentamista varten.

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

makeCache

Toteuttakaa makeCache(subviews:) alustavan välimuistin luomiseksi. SwiftUI kutsuu sitä kerran ennen asettelumetodeja, joten voitte tehdä siinä alustavan mittauksen.

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

Välimuistin lukeminen

Asettelumetodit saavat nyt cache-parametrin inout-parametrina. Lukekaa esilasketut arvonne sen sijaan, että mittaisitte jokaisen lapsinäkymän uudelleen.

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

Kun alinäkymien joukko muuttuu, SwiftUI kutsuu metodia updateCache(_:subviews:). Oletustoteutus rakentaa välimuistin uudelleen metodin makeCache avulla, mutta voitte ohittaa sen ja päivittää välimuistia vaiheittain.

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

Milloin updateCache suoritetaan

updateCache suoritetaan, kun alinäkymien määrä tai identiteetti muuttuu, ei jokaisen geometrisen muutoksen yhteydessä. Tallentakaa välimuistiin vain alinäkymistä riippuvat tiedot, ei ehdotetusta koosta riippuvia tietoja.

Tallentakaa välimuistiin vain ehdotuksesta riippumattomat tiedot

Yleinen virhe on tallentaa välimuistiin ehdotetusta koosta riippuvia tuloksia. Ehdotus voi muuttua kutsujen välillä, joten koosta riippuvat tulokset on laskettava uudelleen eikä niitä saa tallentaa välimuistiin sokeasti.

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

Ominaisten kokojen tallentaminen välimuistiin

Turvallinen toimintatapa on tallentaa välimuistiin kalliin sizeThatFits(.unspecified)-kutsun tulokset ja suorittaa sitten edullinen rivityslaskenta jokaisella kutsulla nykyisen ehdotuksen perusteella.

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

Välttäkää ennenaikaista optimointia

Kun lapsinäkymiä on vain muutama ja ne ovat yksinkertaisia, mittaaminen on edullista ja välimuisti lisää monimutkaisuutta. Profiloikaa ensin ja käyttäkää välimuistia vasta, kun mittaaminen on aidosti kallista, esimerkiksi tekstin, kuvien tai sisäkkäisten asettelujen yhteydessä.

Välimuisti ja arvosemanttiikka

SwiftUI omistaa välimuistin ja välittää sen inout-parametrina. Pitäkää se tavallisena arvotyyppinä, joka ei sisällä viittauksia näkymiin, jotta SwiftUI voi hallita sen elinkaarta turvallisesti.

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

Hyödyn mittaaminen

Käyttäkää SwiftUI Instrumentia tai yksinkertaisia laskureita varmistaaksenne, että välimuisti todella vähentää mittauskutsuja. Optimointi ilman mittaamista on arvailua.

Pikatesti: asettelun välimuisti

Testatkaa ymmärrystänne asettelun välimuistista.

Kertaus: asettelun välimuisti ja suorituskyky

Layout-protokollan Cache-tyyppi, jonka makeCache luo ja updateCache päivittää, tallentaa kalliin ja ehdotuksesta riippumattoman työn, kuten lapsinäkymien ominaiset koot.

Suorittakaa edullinen, ehdotuksesta riippuva laskenta jokaisella kutsulla. Pitäkää välimuisti viittauksettomana arvotyyppinä, välttäkää ennenaikaista välimuistia ja varmistakaa hyöty profiloinnilla ennen kuin lisäätte monimutkaisuutta.

Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Asetteluvälimuisti ja suorituskyky” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Asetteluvälimuisti ja suorituskyky”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Asetteluvälimuisti ja suorituskyky”?

Käytä asetteluvälimuistia tehokkuuden parantamiseen. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Asetteluvälimuisti ja suorituskyky”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Layout-protokollan perusteet
  2. Alinäkymien mittaaminen
  3. Flow-asettelun rakentaminen
  4. Asetteluvälimuisti ja suorituskyky
← Takaisin: Swift Academy