Todas las demás pantallas de esta app las abriste tú, por decisión propia. Esta no: tocaste otra cosa y el bloqueo te interceptó. Esa diferencia cambia por completo el planteamiento técnico. Una pantalla que pediste puede tardar un instante en aparecer; nadie está mirando el cronómetro. Una pantalla que te interrumpe solo tiene una oportunidad de no parecer que el teléfono ha fallado, y tiene que demostrarlo en menos de un tercio de segundo.
La única medida que importa
No la duración de la animación de introducción, sino el hueco antes de que empiece. Puerta, entrada andando, suelo, techo, pizarra, cartel, reloj: la secuencia tiene una línea de tiempo fija, y cada uno de esos retrasos se eligió y se revisó a mano. Nada de eso importa si el propio toque tiene un tartamudeo delante. Una entrada preciosa de 800ms detrás de un fotograma en blanco de 400ms se lee como «esta app va lenta», y punto — el cuidado puesto en los detalles nunca llega a verse, porque el veredicto ya se dictó sobre el fotograma en blanco.
Así que el objetivo real no es «la animación se ve fluida». Es «algo aparece antes de que el usuario tenga tiempo de preguntarse si el toque se registró». Ese margen es más o menos el mismo que el de un cambio de app del sistema — un par de cientos de milisegundos — y es un listón mucho más exigente que el que se aplica a la mayoría de las transiciones dentro de la app.
Nunca bloquees el bloqueo
El aula no puede esperar a la red. Da igual qué pregunta se haga: tiene que salir de datos que ya estaban en el dispositivo antes de que tocaras la pantalla — descargados y guardados en caché de antemano, en tus condiciones, no pedidos en el momento en que ya estás molesto mirando una rueda de carga. Si esa caché alguna vez está vacía, el fallo honesto es una tarjeta de pregunta más sencilla y estática, no una rueda de carga delante de un profesor que todavía no ha aparecido.
La misma regla se aplica a los recursos. Una petición de fuente o de imagen en la ruta crítica es depender de que la red vaya rápida justo en el momento en que estás en mitad de una interrupción, que es precisamente cuando menos paciencia tienes para eso. Alojar nosotros mismos las cuatro fuentes que usa este sitio es el mismo instinto aplicado a la app: nada de lo que necesita la introducción debería poder fallar porque alguien esté con el mal wifi de un hotel.
Adónde van realmente los fotogramas
Solo propiedades de animación baratas — posición y opacidad, del tipo que un teléfono puede mover sin tener que recalcular el diseño por debajo, nunca nada que fuerce un reflow a mitad de la secuencia. Un aula que tiene que aparecer tan a menudo no se puede permitir ni una sola propiedad que sea costosa en un dispositivo antiguo, porque «dispositivo antiguo» no es aquí un caso extremo: es una parte importante de quién sostiene el teléfono justo en el momento en que va a abrir algo bloqueado.
El corolario es que la mayor parte de lo que parece movimiento en la introducción es en realidad muy poco movimiento, bien puesto en escena. Una puerta que se abre, una figura que camina cuatro pasos, una pizarra que se desliza a su sitio — no es que cambien muchos píxeles, es que cambian muchos píxeles con un *tiempo* muy preciso, un truco más barato de lo que parece desde fuera.
De lo que todavía no estamos seguros
El arranque en frío es la brecha honesta. La primerísima interrupción después de reiniciar el teléfono o de que el sistema haya cerrado la app en segundo plano es más lenta que todas las siguientes, porque nada está «caliente» todavía — ninguna pregunta en caché, ninguna fuente ya procesada, ningún paquete de JS ya residente en memoria. No tenemos una solución limpia para ese peaje del primer toque más allá de mantener la app lo más ligera posible y confiar en que el sistema operativo no la expulse con demasiadas ganas. Si tu primerísimo bloqueo del día se siente un poco más lento que el resto, esa es la razón, y no es algo que hayamos decidido ignorar.
Los Android de gama baja son la otra cuestión abierta — los teléfonos donde esto importa más, ya que un tropiezo de dos segundos es una fracción mucho mayor de un presupuesto de 300ms ahí que en un buque insignia. Estamos diseñando contra esa limitación, no contra el dispositivo que tengamos nosotros en la mano en ese momento.