@malla/renderer est une fonction pure qui transforme des documents en HTML et en CSS. Elle tourne dans les cadres du canevas, dans le Worker sites et dans les tests : c'est pourquoi l'éditeur correspond à la production.
renderPage({ doc, components, classes, tokens, site, data, user? })
→ { html, css, runtime: RuntimeManifest }
Publication par instantané
Une publication écrit un instantané immuable (documents des pages et des composants, classes, jetons, SEO, manifeste) et bascule un seul pointeur : la publication est donc instantanée et atomique, et revenir en arrière n'est qu'une autre bascule. La fenêtre de publication et POST /sites/:siteId/rollback la ramènent à l'une des 50 publications les plus récentes de l'environnement (voir Retour arrière) ; les éléments du CMS, les ressources et les autres données en direct ne reviennent pas en arrière. Les pages critiques sont prérendues pour ne jamais être froides.
Rendu à la demande
- Les pages statiques sont rendues une fois par publication et mises en cache pour toujours sous des clés qui incluent le
publishId. - Les pages serveur exécutent les requêtes serveur et sont rendues à chaque requête à l'edge, avec un TTL court.
- Les changements du CMS incrémentent une révision par collection ; seules les pages qui en dépendent sont rendues à nouveau.
/api/*et/_auth/*vont au runner ;/api/_q/*(requêtes client) et/api/_forms/*restent dans sites.
Runtime d'îlots
La structure publiée est du HTML statique. Seuls les textes, attributs et styles liés ainsi que les listes répétées changent : @malla/runtime se résume donc à @vue/reactivity + l'interpréteur d'expressions partagé + un patcheur de DOM minimal. Pas de DOM virtuel, pas d'hydratation complète, moins de 25 Ko compressé avec gzip. Il ne se charge que sur les pages qui ont des liaisons, des formulaires ou des workflows client ; GSAP est un chunk séparé, chargé uniquement pour les interactions.
- Le moteur de rendu émet un manifeste des îlots à hydrater.
- Les pages rendues à chaque requête intègrent le visiteur dans le manifeste ; les pages en cache appellent
/_auth/meune seule fois au démarrage, et seulement si quelque chose lituser. - La navigation entre pages utilise le préchargement des Speculation Rules et les View Transitions, pour une sensation d'application.
Dans le canevas
Chaque plan de travail est une iframe en bac à sable sur une origine distincte, qui dialogue avec l'éditeur via un protocole postMessage typé : init, patch avec des ops, mesure, test de clic (hit-test). Les patchs ne touchent que le nœud modifié et sa règle CSS.