@malla/renderer es una función pura que convierte documentos en HTML y CSS. Corre en los frames del lienzo, en el Worker sites y en los tests, y por eso el editor coincide con producción.
renderPage({ doc, components, classes, tokens, site, data, user? })
→ { html, css, runtime: RuntimeManifest }
Publicación de snapshots
Una publicación escribe un snapshot inmutable (documentos de páginas y componentes, clases, tokens, SEO, manifiesto) y cambia un solo puntero, así que publicar es instantáneo y atómico, y revertir es otro cambio de puntero. El popover de publicación y POST /sites/:siteId/rollback lo devuelven a una de las 50 publicaciones más recientes del entorno (consulta Revertir); los ítems del CMS, los recursos y otros datos en vivo no se revierten. Las páginas críticas se prerenderizan para que nunca estén en frío.
Renderizado bajo demanda
- Las páginas estáticas se renderizan una vez por publicación y se guardan en caché para siempre con claves que incluyen el
publishId. - Las páginas de servidor ejecutan consultas de servidor y se renderizan en cada solicitud en el edge, con un TTL corto.
- Los cambios del CMS incrementan una revisión por colección; solo vuelven a renderizarse las páginas que dependen de ella.
/api/*y/_auth/*van al runner;/api/_q/*(consultas de cliente) y/api/_forms/*se quedan en sites.
Runtime de islas
La estructura publicada es HTML estático. Solo cambian los textos, atributos y estilos enlazados y las listas repetidas, así que @malla/runtime es @vue/reactivity + el intérprete de expresiones compartido + un parcheador de DOM mínimo: sin DOM virtual, sin hidratación completa, menos de 25 KB con gzip. Solo se carga en páginas con enlaces de datos, formularios o flujos de trabajo de cliente; GSAP es un chunk aparte que solo se carga para las interacciones.
- El renderizador emite un manifiesto de islas con lo que hay que hidratar.
- Las páginas renderizadas por solicitud incluyen al visitante en el manifiesto; las páginas en caché piden
/_auth/meuna sola vez al arrancar, y solo si algo leeuser. - La navegación entre páginas usa prefetch con Speculation Rules y View Transitions para que se sienta como una app.
En el lienzo
Cada mesa de trabajo es un iframe en sandbox en un origen aparte, que habla con el editor mediante un protocolo postMessage tipado: init, patch con ops, measure, hit-test. Los parches solo tocan el nodo que cambió y su regla CSS.