HTML en Canvas: Uniendo UI y GPU en la Web

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2026
November 16 - 19, 2026
New York, US & Online
Upcoming event
JSNation US 2026
JSNation US 2026
November 16 - 19, 2026. New York, US & Online
Bookmark
Rate this content
Sentry
Promoted
Code breaks, fix it faster

Crashes, slowdowns, regressions in prod. Seer by Sentry unifies traces, replays, errors, profiles to find root causes fast.

Get started

El desarrollo web moderno todavía se basa en una fuerte separación entre HTML/CSS para UI y Canvas/WebGL para renderizado. En la práctica, combinar ambos a menudo lleva a una lógica de sincronización compleja y a una serie de soluciones alternativas.

En esta charla, primero recorreremos cómo se suelen resolver estos problemas hoy en día, incluyendo la sincronización de desplazamiento, el tiempo de bucle de fotogramas, el renderizado basado en tijeras y el mapeo de elementos DOM en una escena WebGL, y por qué estos enfoques tienden a ser frágiles y difíciles de escalar.

Usando un conjunto de experimentos y sitios web desarrollados en basement.studio, mostraremos estos patrones en la práctica, combinando diseños reales con shaders y efectos interactivos.

A partir de ahí, introduciremos HTML-in-Canvas y mostraremos cómo simplifica muchos de estos problemas, no como una solución finalizada, sino como una dirección que elimina la necesidad de la mayoría de las soluciones alternativas de sincronización y renderizado en las que confiamos hoy.

También cubriremos los desafíos de construir UI directamente en WebGL, donde el diseño, el texto y la interactividad se vuelven difíciles de manejar, especialmente en entornos como WebXR.

This talk has been presented at JSNation 2026, check out the latest edition of this JavaScript Conference.

Santiago Colombatto
Santiago Colombatto
Tomas Ferreras
Tomas Ferreras
17 min
15 Jun, 2026

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Santiago Colombato explica el desafío de sincronizar DOM y WebGL para sitios web visualmente pesados, centrándose en la sincronización de desplazamiento y los conceptos básicos de WebGL. La sincronización de desplazamiento de WebGL implica ajustar la posición del canvas para prevenir el desplazamiento. Optimizar el renderizado de texto en WebGL incluye superar desafíos de desplazamiento y recorte. Las complejidades del renderizado de fuentes en WebGL incluyen el manejo manual de las características del texto. Las mejoras implican dibujar elementos HTML reales dentro del canvas para efectos visuales. Las demostraciones de WebXR muestran la integración de HTML en el espacio 3D, enfatizando la estética y la accesibilidad.

1. Understanding DOM and WebGL Sync

Short description:

Santiago Colombato, un desarrollador front-end, discute el desafío de sincronizar DOM y WebGL para sitios web visualmente pesados, centrándose en la sincronización de desplazamiento y los conceptos básicos de WebGL, incluidos los shaders y el renderizado con la GPU.

Hola a todos. Soy Santiago Colombato. Trabajo como desarrollador front-end en Basement Studio. Construimos sitios y experiencias con empresas como Brazil, Daylight, MrBeast, y mucho de lo que enviamos utiliza WebGL.

Hoy, quiero hablar sobre una brecha con la que seguimos encontrándonos, y esa brecha es hacer que el DOM y WebGL se muevan como uno solo. Cuando construyes un sitio web visualmente pesado, generalmente tienes dos fases para gestionar. Un lado, es el DOM. Te da diseño, texto, desplazamiento, accesibilidad, y el otro es WebGL, shaders, renderizado con GPU, efectos geniales, básicamente. El desafío comienza cuando ambos necesitan mantenerse sincronizados, y la parte difícil es hacer que se muevan como uno solo.

Así que, me voy a centrar en un problema específico hoy, y ese es la sincronización de desplazamiento. Pero primero, la mayoría de ustedes escribe JavaScript, pero no todos escriben WebGL, así que permítanme tomar un minuto para cubrir lo básico para que podamos entender el contexto completo. Cuando trabajas en una página web normal, escribes HTML y CSS, el navegador calcula el diseño, pinta texto y elementos, y todo funciona. No piensas mucho en la GPU.

WebGL cambia eso. WebGL es una API de JavaScript que te permite renderizar gráficos dentro de un elemento canvas. Trabajas directamente con la GPU. Pero la compensación aquí es que dejas el flujo de renderizado normal del navegador. Dentro del canvas, no tienes HTML. No tienes CSS. Así que, solo estás dibujando píxeles con pequeños programas que se ejecutan en la GPU. Esos programas se llaman shaders. Tenemos dos tipos de shaders. El primero es el vertex shader.

2. Solving WebGL Scroll Sync

Short description:

Los vertex y fragment shaders manejan las decisiones de posicionamiento y color en WebGL. Los modelos de sitios web híbridos utilizan tanto DOM como WebGL para trabajos visuales pesados, requiriendo sincronización para evitar discrepancias durante el desplazamiento. El ajuste de la posición del canvas y el desplazamiento superior puede resolver problemas de deriva en las capas de WebGL durante el desplazamiento.

Ese programa se ejecuta una vez por vértice, y el trabajo es simple. Toma una posición 3D, y produce una coordenada de pantalla. Si quieres mover, escalar o transformar algo en WebGL, trabajarás con el vertex shader. El segundo es el fragment shader. Una vez que la GPU sabe dónde están los triángulos, los rellena. Así que, para cada píxel dentro de un triángulo, el fragment shader decide qué color escribir. Piensa en efectos visuales, luces, texturas. Todo eso es el fragment shader, respondiendo la misma pregunta millones de veces por cuadro. ¿De qué color debería ser este píxel?

Básicamente, el vertex shader decide dónde, y el fragment shader decide cómo se ve. Si miras sitios web visualmente pesados como este, seguro que usarán este modelo híbrido. El DOM sigue ahí, pero el canvas está haciendo gran parte del trabajo visual pesado. Los resultados pueden verse geniales, pero hay un costo. El navegador entiende el DOM, pero tu escena de WebGL es como una caja negra. Así que, necesitamos hacer que estén de acuerdo. Y el desplazamiento es donde las cosas empiezan a romperse. Cuando desplazas una página, el navegador actualiza la posición de desplazamiento visual inmediatamente. Pero tu capa de WebGL se actualiza desde JavaScript, dentro de un bucle de cuadros, desde un valor de muestra después del desplazamiento. Así que, tienes dos sistemas que están cerca en el tiempo, pero no son lo mismo.

El navegador mueve la página, y el canvas reacciona un cuadro después. Usualmente, apenas notas esto, pero no queremos eso. Así que, déjame mostrarte un caso real. Tenemos una demo aquí con una escena de WebGL que dibuja este efecto de líder sobre las imágenes. Y si desplazo, verás que la capa de WebGL se desplaza. Así que, necesitamos arreglar esto. Y lo primero que podemos hacer es fijar el canvas, y pasar el desplazamiento superior para que coincida con el desplazamiento en cada cuadro. Básicamente, estás haciendo que la posición del canvas sea absoluta, y estás actualizando el desplazamiento superior para que coincida con el desplazamiento. Esto elimina la deriva. Pero por favor revisa esto, los bordes del canvas. Se están recortando. Así que, nos estamos acercando.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

¡Mejora el Rendimiento de Tus Juegos WebGL Unity!
JS GameDev Summit 2023JS GameDev Summit 2023
7 min
¡Mejora el Rendimiento de Tus Juegos WebGL Unity!
Top Content
The Talk discusses ways to boost the performance of WebGL Unity games, including issues with bundle size, memory usage, and runtime performance. It suggests using Brotli for compression and non-exception support for better performance. Choosing the appropriate texture compression format and experimenting with separate builds can also help. The Talk also covers optimizing textures, models, audio, and assets by reducing build size, using compression, disabling unnecessary models, and optimizing audio quality. Unity's optimization tools and profilers are recommended for analyzing performance and memory issues.
Unreal Engine en WebAssembly/WebGPU
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Unreal Engine en WebAssembly/WebGPU
Top Content
Alex Saint-Louis, co-founder of Wunder Interactive, shares the mission of bringing Unreal Engine to the browser, enabling cross-platform 3D applications and games. They are working on a WebGPU back end for Unreal Engine to push the limits of 3D on the web. Wunder Interactive has improved compression, built their own asset file system, and offers powerful tools for game developers. They are utilizing modern web technologies like WebAssembly, WebGL, and WebGPU, and plan to support other engines like Unity and Godot. The team aims to transform the industry by bringing console-quality games to the browser and providing an alternative distribution path. They are excited to bring Unreal Engine 5 to the web with WebGPU support and are working on WebXR support for cross-platform 3D experiences, including VR.
Detectar y evitar problemas comunes de rendimiento y memoria en compilaciones de Unity WebGL
JS GameDev Summit 2022JS GameDev Summit 2022
10 min
Detectar y evitar problemas comunes de rendimiento y memoria en compilaciones de Unity WebGL
Top Content
Today's Talk focuses on avoiding performance and memory issues in Unity WebGL builds. The importance of managing memory and keeping the heap size small is highlighted. Techniques such as using asset bundles or an addressable system can help reduce memory usage. The limitations of garbage collection in WebGL builds are discussed, along with tips for optimizing Unity code. Tools like Backtrace can assist in debugging memory and performance issues.
Ampliando Unity WebGL con Javascript
JS GameDev Summit 2022JS GameDev Summit 2022
32 min
Ampliando Unity WebGL con Javascript
Top Content
Unity targets over 25 platforms and technologies, including desktop, mobile, and virtual reality. They use Emscripten to compile the engine and game logic into WebAssembly for web development. Unity can be extended with plugins to access browser features like WebXR's augmented reality mode. The speaker demonstrates intercepting Unity's calls to the browser to modify its behavior. Unity is actively working on mobile support for web export and improving documentation for extending Unity with web plugins.
¡Potenciadores de Pixi!
JSNation Live 2021JSNation Live 2021
30 min
¡Potenciadores de Pixi!
Pixie is a powerful tool for creating scenes and effects in software development. It supports features like texture mapping, Spine animation, and filters for creating cool effects. The talk also covers the use of render textures to capture and download images, as well as the importance of communication and a positive attitude in software development. The speaker shares their journey into coding and discusses the potential for porting Unity games to JavaScript using technologies like web GL and web GPU.
Casar juegos WASM/WebGL con interfaz de React
React Summit 2022React Summit 2022
22 min
Casar juegos WASM/WebGL con interfaz de React
Jonny discusses marrying WebAssembly and WebGL games with React, emphasizing the importance of choosing the right tool for game development. He introduces the Godot game engine as a powerful choice for game development and highlights the limitations of Godot. Jonny demonstrates how to combine React with Godot and showcases the ability to dynamically switch between different games on the same website. He explains the process of exporting a Godot game to the web using WebAssembly. Jonny also discusses the communication between React and Godot games and highlights the benefits and future improvements of using this approach.

Workshops on related topic

Crea un Juego Con PlayCanvas en 2 Horas
JSNation 2023JSNation 2023
116 min
Crea un Juego Con PlayCanvas en 2 Horas
Top Content
Featured WorkshopFree
Steven Yau
Steven Yau
En esta masterclass, construiremos un juego utilizando el motor WebGL de PlayCanvas desde el principio hasta el final. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la escritura de scripts, la creación de UI y mucho más.
Tabla de contenido:- Introducción- Introducción a PlayCanvas- Lo que vamos a construir- Agregando un modelo de personaje y animación- Haciendo que el personaje se mueva con scripts- 'Falsa' carrera- Agregando obstáculos- Detectando colisiones- Agregando un contador de puntuación- Fin del juego y reinicio- ¡Resumen!- Preguntas
Nivel de la masterclassSe recomienda familiaridad con los motores de juegos y los aspectos del desarrollo de juegos, pero no es obligatorio.
Cómo crear arte generativo increíble con código JavaScript simple
JS GameDev Summit 2022JS GameDev Summit 2022
165 min
Cómo crear arte generativo increíble con código JavaScript simple
Top Content
Workshop
Frank Force
Frank Force
En lugar de dibujar manualmente cada imagen como en el arte tradicional, los artistas generativos escriben programas que son capaces de producir una variedad de resultados. En esta masterclass aprenderás cómo crear arte generativo increíble usando solo un navegador web y un editor de texto. Comenzando con conceptos básicos y avanzando hacia la teoría avanzada, cubriremos todo lo que necesitas saber.