
Un objetivo que parecía generoso
Cuando empezamos a desarrollar SyncGallery, elegimos un objetivo de rendimiento claro: la app tenía que seguir siendo rápida con 100 000 archivos multimedia en un dispositivo. Escribimos cada algoritmo pensando en esa cifra y lo probamos con bibliotecas de aproximadamente ese tamaño.
En aquel momento, 100 000 archivos parecían más que suficientes. A 30 fotos al día, todos los días, se tardaría unos nueve años en llegar a esa cifra. Estábamos convencidos de que nadie guardaría más que eso en un teléfono.
Los usuarios nos demostraron lo contrario
Poco después del primer lanzamiento, descubrimos lo equivocada que era esa suposición. Las bibliotecas reales eran mucho más grandes que nuestro techo: años de archivos de la cámara, fotos migradas desde teléfonos y ordenadores antiguos, y colecciones familiares enteras guardadas en tarjetas de memoria de gran capacidad. Muchos teléfonos Android todavía admiten tarjetas de memoria de 512 GB o incluso de 1 TB, con espacio para bibliotecas muchas veces más grandes que nuestro objetivo original.
La app no se vino abajo de repente en el archivo 100 001: los límites de rendimiento rara vez son tan educados. En cambio, operaciones que deberían sentirse instantáneas tardaban notablemente más, y la experiencia seguía empeorando a medida que la biblioteca superaba el objetivo. Para las personas con las bibliotecas más grandes, que probablemente son las que más necesitan una app de copias de seguridad, eso no era suficiente.
Qué cambia a diez veces la escala
Muchos atajos que son inofensivos con 100 000 archivos se convierten en problemas con un millón. El patrón siempre es el mismo: un coste crece discretamente con la biblioteca.
- Mantenerlo todo en memoria. Una lista de 100 000 entradas cabe sin problemas en la RAM. Con diez veces ese tamaño, multiplicado por pantallas y cachés, la presión sobre la memoria provoca tirones y, en el peor de los casos, cierres inesperados.
- Volver a comprobar todos los archivos cuando solo han cambiado unos pocos. Volver a examinar toda la biblioteca porque han llegado unas cuantas fotos apenas se nota con 100 000 archivos. Con un millón, puede suponer minutos de trabajo en segundo plano sin ningún beneficio visible.
- Actualizar la pantalla después de cada cambio. Una actualización por cada archivo procesado pasa desapercibida en una biblioteca pequeña. Cuando los cambios llegan por decenas de miles, puede congelar la interfaz.
- Dejar que las cachés crezcan sin límite. Una caché sin límite acaba compitiendo con las pantallas que debía acelerar.
No son errores exóticos. Son decisiones de ingeniería corrientes que dejan de funcionar un orden de magnitud más tarde.
Rediseñar para un millón
Subimos el objetivo a un millón de archivos y revisamos la app con esa cifra como nuevo listón. Ahora, unas cuantas reglas dan forma a todo lo que desarrollamos:
- Mantener estable el uso de memoria a medida que crece la biblioteca. Las pantallas de listas más pesadas ahora cargan los archivos desde la base de datos por ventanas en lugar de mantenerlo todo en memoria. Las cachés de imágenes grandes tienen un límite, así que descartan las entradas más antiguas en lugar de crecer sin fin. Este cambio continúa pantalla a pantalla; es la disciplina con la que trabajamos ahora, no una meta que ya hayamos alcanzado en todas partes.
- Comparar en lugar de volver a leer. Los análisis registran lo que ha cambiado en lugar de volver a procesarlo todo. Cuando un proveedor de nube ofrece un registro de cambios, usamos esos cambios en lugar de volver a listar carpetas enteras.
- No hacer nunca que la interfaz espere a la biblioteca. El trabajo pesado se ejecuta en segundo plano y por lotes. Las actualizaciones de la pantalla se agrupan para que una ráfaga de 10 000 cambios no provoque 10 000 redibujados.
- Medir en dispositivos reales con bibliotecas reales. Los perfiles de rendimiento sustituyeron a las suposiciones. Las mayores mejoras llegaron de lugares que nunca habríamos sospechado sin medir.
La rapidez es un hábito, no un hito
El cambio más importante no fue ninguna corrección concreta. Fue convertir la pregunta del millón de archivos en parte de cómo evaluamos cada nueva función: ¿qué le pasa a esta pantalla, este análisis o esta caché cuando la biblioteca es diez veces más grande de lo que esperamos?
Alguien superará cualquier cifra que elijamos, y esta vez preferimos estar preparados.
Si tienes una biblioteca enorme, este trabajo se hizo para ti. Si alguna vez SyncGallery te parece lento con tu colección, cuéntanoslo: las bibliotecas reales nos enseñan más que las pruebas sintéticas.
Prueba SyncGallery
Una app de galería para Android con sincronización en la nube que tú controlas.
Disponible en Google Play