Blitz: renderizador web ligero, modular y escalable
(github.com/DioxusLabs)Blitz: renderizador web ligero, modular y escalable
Blitz es un renderizador HTML/CSS "nativo" desarrollado para dar soporte al proyecto "Dioxus Native". En lugar de usar un motor de JavaScript, utiliza APIs nativas de Rust para poder interactuar directamente con bibliotecas de reactividad y manejo de estado de Rust.
Actualmente admite dos frontends
- Frontend de HTML/Markdown: puede renderizar cadenas HTML. Es útil para previsualizar archivos HTML y Markdown, pero carece de interactividad.
- Frontend de Dioxus: puede renderizar el VirtualDom de Dioxus. Admite interactividad completa mediante el manejo de eventos de Dioxus.
Tecnologías base de Blitz
- Stylo: el motor CSS paralelo de nivel navegador de Firefox
- Vello + WGPU: renderizado
- Taffy: layout a nivel de cajas
- Parley: layout de texto/a nivel inline
- AccessKit: accesibilidad
- Winit: ventanas y manejo de entrada
Nota: este repositorio incluye una nueva versión de Blitz que usa Stylo. El código fuente de la versión anterior sigue disponible en la rama legacy, pero ya no está en desarrollo activo.
Capturas de pantalla
- Renderizador de Dioxus
- Renderizador HTML (renderizando google.com)
Probarlo
- Clona este repositorio
- Ejecuta ejemplos:
cargo run --example googlecargo run --example url https://myurl.com- También puedes usar otros ejemplos
- Agrega
--releasepara un mejor rendimiento en ejecución
- Cambia la escala con
Ctrl/Cmd + +/Ctrl/Cmd + -y presiona F1 para mostrar los rectángulos de layout
Objetivos
Blitz está diseñado para renderizar HTML y CSS. No soporta todas las capacidades de un navegador, y planea ofrecer esas funciones "adicionales" de forma opcional. Considera que los navegadores son excesivamente complejos para el renderizado básico de HTML/CSS.
Funciones planeadas:
- Layout HTML moderno (flexbox, grid, table, block, inline, absolute/fixed, etc.)
- CSS avanzado (selectores complejos, media queries, variables CSS)
- Controles de formulario HTML
- Accesibilidad mediante AccessKit
- Extensibilidad mediante widgets personalizados
Funciones no soportadas:
- webrtc, websockets, bluetooth, localstorage, etc.
Aún no existen bindings de Blitz para otros lenguajes (JavaScript, Python, etc.), pero las contribuciones son bienvenidas.
Arquitectura
Blitz se divide en varias partes:
blitz-dom: abstracción central del DOM que incluye resolución de estilos y layout, pero no dibujo/pintadoblitz: agrega ablitz-domun renderizador basado en Vello/WGPUdioxus-blitz: capa de integración de Dioxus que renderiza apps de Dioxus usando Blitz. Actualmentedioxus-blitztambién incluye un renderizador HTML, pero es posible que en el futuro se separe en un paquete distinto.
Estado
Blitz es actualmente experimental. Se está trabajando activamente para hacerlo utilizable, pero todavía no se recomienda usarlo para construir aplicaciones.
TODO
- Abstracción central del árbol DOM
- Parsing de estilos con html5ever
- Cálculo de estilos para documentos html5ever
- Cálculo de layout con Taffy
- Renderizado con WGPU
Renderizado
- Renderizar en ventana
- Renderizar a imagen
- Gradientes
- Bordes/contornos
- Imágenes rasterizadas (png, jpeg, etc.)
- Zoom
- SVG
- SVG externo (soporte básico)
- SVG inline
- Sombras
- Animaciones/transiciones
- Controles de formulario estándar (checkbox/dropdown/slider, etc.)
- Widgets personalizados
- Elementos shadow
Layout
- Inline (soporte parcial - implementación inmadura)
- Block
- Flexbox
- Grid
- Líneas de grid con nombre
- Subgrid
- Table
- Z-index
- Funciones CSS adicionales
box-sizing: content-boxcalc()position: staticdirection: rtltransform
Texto
- Carga de fuentes
- Carga de fuentes del sistema
- Carga de fuentes web
- Texto
- Shaping / Bidi
- Layout / salto de línea
- Tamaño de fuente / altura de línea
- Color del texto
- Negrita / cursiva
- Subrayado / tachado
- Selección de texto
Entrada
- Scroll
- Vista raíz
- Elementos con
overflow: scroll
- Detección de hover
- Manejo de clics
- Entrada de texto
Rendimiento
- Hot reloading
- Scroll sin reinterpretar estilos ni layout
- Caché de estilos
- Caché de layout
Otros
- Múltiples ventanas
- Árbol de accesibilidad
- Foco
- Herramientas de desarrollo
- Hooks para menús contextuales
use_wgpu_context()para llevar elementos a una superficie de renderizado arbitraria
Licencia
Este proyecto tiene doble licencia Apache 2.0 y MIT. A menos que se indique lo contrario de forma explícita, toda contribución enviada intencionalmente por un usuario para incluirse en stylo-dioxus será licenciada bajo MIT sin condiciones adicionales.
Resumen de GN⁺
- Blitz es un renderizador HTML/CSS ligero basado en Rust, desarrollado para dar soporte al proyecto Dioxus.
- Deja fuera las funciones complejas de un navegador y se enfoca en el renderizado básico de HTML/CSS.
- Está en fase experimental y todavía no se recomienda para construir aplicaciones.
- Proyectos con funcionalidades similares incluyen Servo y WebRender.
Aún no hay comentarios.