HyperFrames
Código de HyperFrames: instantes repetidos y finalización GPU
Lee el adaptador GSAP y el despachador en un commit fijo, contrasta sus pruebas y entiende cuándo un timestamp duplicado exige renderizado forzado.
Qué aprenderás
- GSAP recibe un ajuste suprimido antes de posicionarse exactamente.
- La deduplicación compara el último valor, no una ventana temporal.
- El registro es síncrono aunque la finalización sea asíncrona.
Antes de empezar
- HTML, CSS y JavaScript básicos
- Node.js 22+ y FFmpeg para el ejercicio local
Explica la frontera del capítulo y utiliza su lista para evaluar un flujo de vídeo repetible.
Conclusiones clave
- GSAP recibe un ajuste suprimido antes de posicionarse exactamente.
- La deduplicación compara el último valor, no una ventana temporal.
- El registro es síncrono aunque la finalización sea asíncrona.
Fija una ruta de lectura pequeña
Este recorrido utiliza el commit 0d5d3f3eb3aecd9fd64954d2767d3d64e97e58fc y los archivos gsap.ts, seek-dispatch.ts y sus pruebas. La pregunta inicial es concreta: ¿qué ocurre al solicitar dos veces el mismo instante? Seguir una conducta precisa resulta más útil que describir un árbol de directorios sin recorrer su ejecución.
La operación de createGsapAdapter termina si no hay línea temporal. En caso contrario la pausa y prefiere totalTime: primero llama con el objetivo más 0.001 y eventos suprimidos, y después con el objetivo exacto y la política solicitada. El comentario explica que el ajuste fuerza a GSAP a reconsiderar el estado cuando el tiempo no ha cambiado.
Contrasta despacho ordinario y forzado
dispatchSeekEvent almacena el último tiempo y suprime un valor idéntico consecutivo. forceDispatchSeekEvent actualiza el mismo valor, pero emite siempre. Las pruebas inspeccionadas cubren deduplicación ordinaria, repetición forzada y deduplicación normal inmediatamente posterior al evento forzado, haciendo visible la diferencia entre funciones.
El comentario presenta las llamadas duplicadas en una misma pila como motivación, pero la implementación no reinicia el valor al pasar por una microtarea o temporizador. La condición concreta es igualdad con el último valor. No deduzcas del comentario garantías de planificación adicionales; prueba cualquier extensión que dependa del tiempo transcurrido entre llamadas.
Sigue finalización y errores, no solo eventos
El listener hf-seek debe llamar a detail.waitUntil de forma síncrona mientras el despacho acepta registros; la promesa puede terminar después. El módulo agrupa ese trabajo, retiene un rechazo y permite esperar generaciones pendientes mediante waitForSeekCompletion. Registrar después de un await queda fuera de la ventana aceptada.
Las pruebas incluyen generaciones superpuestas, trabajo añadido después de iniciar la espera y rechazos observados por barreras concurrentes. Léelas junto al bucle y la variable de fallo retenido. Aquí se ha inspeccionado su código, no ejecutado la suite. La secuencia del ejemplo es un ejercicio de lectura, no una medición de captura.
Pasos de implementación
- 1
Contrasta gsap.ts con gsap.test.ts en el commit fijo.
- 2
Compara las funciones de despacho ordinario y forzado.
- 3
Sigue waitUntil desde el registro hasta las promesas pendientes.
- 4
Lee las pruebas de rechazos y barreras antes de extender el sistema.
Ejemplo para copiar
dispatchSeekEvent(4) -> un evento
dispatchSeekEvent(4) -> sin evento nuevo
forceDispatchSeekEvent(4) -> otro evento
dispatchSeekEvent(4) -> sin evento nuevo
Durante el evento: registrar con detail.waitUntil(promise).
Después: waitForSeekCompletion() observa finalización o fallo.Preguntas frecuentes
¿La deduplicación caduca en la siguiente vuelta del bucle de eventos?
La implementación inspeccionada no incluye ese reinicio. Compara el tiempo solicitado con el último valor almacenado.
¿Puede un listener esperar antes de llamar a waitUntil?
Debe registrar durante el despacho síncrono. La promesa registrada sí puede completarse de forma asíncrona.
Fuentes
- README fijadoFuente verificada 2026-09-07
- Adaptador GSAPFuente verificada 2026-09-07
- Despachador temporalFuente verificada 2026-09-07
- Adaptador Three.jsFuente verificada 2026-09-07
- Pruebas GSAPFuente verificada 2026-09-07
- Pruebas del despachadorFuente verificada 2026-09-07