Asetteluvälimuisti ja suorituskyky
Käytä asetteluvälimuistia tehokkuuden parantamiseen.
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 maxWidthVä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.
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
- Layout-protokollan perusteet
- Alinäkymien mittaaminen
- Flow-asettelun rakentaminen
- Asetteluvälimuisti ja suorituskyky