Caché y rendimiento del diseño
Utilice la caché del diseño para mejorar la eficiencia.
Caché y rendimiento del diseño es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
¿Por qué usar una caché de layout?
SwiftUI puede llamar a sizeThatFits y placeSubviews muchas veces durante una sola pasada de layout.
Si los cálculos son costosos, una caché permite calcularlos una vez y reutilizarlos, evitando trabajo repetido.
El tipo asociado Cache
El protocolo Layout tiene un tipo asociado Cache, cuyo valor predeterminado es Void. Defina su propia estructura para almacenar resultados precalculados.
struct FlowLayout: Layout {
struct CacheData {
var sizes: [CGSize] = []
}
typealias Cache = CacheData
}makeCache
Implemente makeCache(subviews:) para crear la caché inicial. SwiftUI lo llama una vez antes de los métodos de layout, lo que le permite realizar mediciones preliminares.
func makeCache(subviews: Subviews) -> CacheData {
let sizes = subviews.map { $0.sizeThatFits(.unspecified) }
return CacheData(sizes: sizes)
}Leer la caché
Los métodos de layout ahora reciben cache como parámetro inout. Lea los valores precalculados en lugar de volver a medir cada vista secundaria.
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
Cuando cambia el conjunto de subvistas, SwiftUI llama a updateCache(_:subviews:). La implementación predeterminada vuelve a crear la caché mediante makeCache, pero puede sobrescribirla para actualizarla de forma incremental.
func updateCache(_ cache: inout CacheData, subviews: Subviews) {
cache.sizes = subviews.map { $0.sizeThatFits(.unspecified) }
}Cuándo se ejecuta updateCache
updateCache se ejecuta cuando cambia el número o la identidad de las subvistas, no con cada ajuste geométrico. Almacene en caché solo los datos que dependen de las subvistas, no del tamaño propuesto.
Almacenar solo datos independientes de la propuesta
Un error común consiste en almacenar resultados que dependen del tamaño propuesto. La propuesta puede cambiar entre llamadas, por lo que los resultados dependientes del tamaño deben volver a calcularse, no almacenarse en caché a ciegas.
// OK to cache: intrinsic child sizes
// NOT OK to cache: row breaks (depend on proposed width)Almacenar tamaños intrínsecos en caché
El patrón seguro consiste en almacenar en caché los resultados costosos de sizeThatFits(.unspecified) y ejecutar después la aritmética económica del ajuste en cada llamada usando la propuesta actual.
struct CacheData { var intrinsic: [CGSize] = [] }
// wrapping uses cache.intrinsic + current maxWidthEvitar la optimización prematura
Para unas pocas vistas secundarias sencillas, la medición es económica y una caché añade complejidad. Mida el rendimiento primero y use una caché solo cuando la medición sea realmente costosa, como ocurre con el texto, las imágenes y los layouts anidados.
La caché y la semántica de valores
SwiftUI posee la caché y la pasa como inout. Manténgala como un tipo de valor sencillo, sin referencias a vistas, para que SwiftUI pueda gestionar su ciclo de vida de forma segura.
struct CacheData {
var sizes: [CGSize] // value types only
}Medir la mejora
Use SwiftUI Instrument o unos contadores sencillos para confirmar que la caché realmente reduce el número de llamadas de medición. Optimizar sin medir es hacer suposiciones.
Comprobación rápida: caché de layout
Compruebe su comprensión del almacenamiento en caché del layout.
Resumen: caché de layout y rendimiento
El tipo asociado Cache del protocolo Layout, creado mediante makeCache y actualizado mediante updateCache, almacena trabajo costoso independiente de la propuesta, como los tamaños intrínsecos de las vistas secundarias.
Ejecute en cada llamada la aritmética económica que depende de la propuesta. Mantenga la caché como un tipo de valor sin referencias, evite almacenar datos en caché prematuramente y verifique la mejora mediante el análisis de rendimiento antes de añadir complejidad.
Preguntas frecuentes
¿La lección «Caché y rendimiento del diseño» es gratis?
Sí — el texto completo de «Caché y rendimiento del diseño» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Caché y rendimiento del diseño»?
Utilice la caché del diseño para mejorar la eficiencia. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Caché y rendimiento del diseño»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Fundamentos del protocolo Layout
- Medición de subvistas
- Crear un diseño de flujo
- Caché y rendimiento del diseño