- Basada en el estándar de Web Components, añade solo reactividad, plantillas declarativas y el mínimo de boilerplate
- Tamaño reducido de alrededor de 5 KB y renderizado rápido; optimiza el rendimiento y la velocidad de carga al actualizar solo las partes modificadas de la UI
- Todos los componentes de Lit son Web Components nativos y pueden reutilizarse en cualquier lugar donde se pueda usar HTML, sin depender de un framework
- Aprovecha Shadow DOM para limitar por defecto el alcance de los estilos, simplificando los selectores CSS y evitando conflictos con otros estilos
- Con Reactive Property se modela la API del componente y su estado interno, permitiendo un rerenderizado eficiente cuando cambian las propiedades
- Plantillas basadas en Tagged template Literals para mayor rapidez y simplicidad
- Puede usarse en distintos proyectos web, desde componentes compartidos y sistemas de diseño hasta aplicaciones completas con menor dependencia de proveedores y mejor mantenibilidad
- Ofrece tutoriales
- GitHub
4 comentarios
Lo vengo sintiendo desde hace 3 años: para usar Web Components vanilla directamente es rápido, y se siente como un framework de transición, aunque es lento..
¿Qué significa eso?
Estamos desarrollando herramientas operativas usando solo el estándar web
web componentylit-html, y me gusta que la cantidad de información que hay que conocer se reduce al mínimo. Enlit-htmlsolo usamos funciones comoevent handler bindingyloop templating. (Para lo demás, con los estándares web es suficiente...).Existe la incomodidad de tener que llamar directamente a
rendercuando hay cambios, pero en vez de que detecte automáticamente los cambios de variables y haya comportamientos implícitos, también tiene la ventaja de que una llamada explícita puede ser más útil. Como son herramientas operativas, tal vez lo percibo así porque la compatibilidad con distintos entornos tiene baja prioridad.Comentarios de Hacker News
Ya estábamos usando un framework pesado, y que alguien agregara Lit solo para sumar una línea al CV terminó siendo una carga grande.
Shadow DOM en particular hizo más graves los problemas de accesibilidad (A11y). Como el alcance de los
idqueda separado, se rompían conexiones comolabel-forydescribe-by, así que fue bastante sufrimiento.Claro, en parte también fue un problema de falta de habilidades de nuestro equipo.
Los estilos sí quedan encapsulados, pero partes importantes como el tamaño de fuente son la excepción, así que cada reemplazo iba dejando pequeños bugs de regresión.
La DX también empeoró bastante; espero que el tooling mejore, pero por ahora la situación solo cansa.
En realidad, parece más común que simplemente quieran probar algo nuevo y lo adopten sin tanta racionalización.
Funcionó bien cuando componentes anidados interactuaban en apps complejas; es parecida a React, pero mucho más nativa del navegador, con menos boilerplate y renderizado más rápido.
A tal punto que no entiendo por qué Lit no es más popular.
Las funciones clave son sorprendentemente simples y en su mayoría dependen de las API de la plataforma.
Por eso cualquiera podría implementarlo por su cuenta, y creo que esa simplicidad tiene mucho valor.
Como referencia, la implementación alternativa que hice es https://github.com/ruphin/lite-html
lit-htmles realmente útil y lo uso en casi todos mis proyectos personales.Poder cargarlo directo desde un CDN y experimentar sin paso de build también es una gran ventaja.
No se siente pesado como otros frameworks; se siente como usar simplemente Vanilla JS + HTML, así que la carga cognitiva es mínima.
Shadow DOM es básicamente un árbol privado que aísla el DOM interno de un componente.
Eso permite el concepto de slots, y con ello se pueden crear componentes realmente componibles.
El problema es que el encapsulamiento de estilos se vuelve una gran barrera al integrarlo con sistemas existentes.
Por eso propuse Open Styleable Shadow Roots, una idea para dejar que los estilos externos fluyan hacia adentro sin perder los slots. Todavía estoy tratando de convencer a los vendors de navegadores.
También escribí sobre eso aquí: https://medium.com/gitconnected/getting-started-with-web-com...
A veces hasta me pregunto por qué no se usa más ampliamente.
Originalmente estaba basado en Backbone.js, pero lo fuimos reemplazando gradualmente en este orden:
lit-html→lit-element→lit.Ahora se ofrece como un Web Component llamado
<converse-root />, así que también se integra bien con otros frameworks como React.GitHub: https://github.com/conversejs/converse.js / demo: https://chat.conversejs.org/
Si usas en el servidor un sistema de templates tipo JSX, ya se siente bastante cómodo, y del lado del cliente al final solo es JS, así que tampoco hay preocupación por upgrades.
Eso sí, las API nativas son demasiado de bajo nivel, así que la DX se queda corta, y Lit le agrega reactividad declarativa encima.
Resuelve de forma limpia partes que da flojera implementar a mano.
htmlde Lit y JSX.De hecho, JSX requiere una etapa de compilación, así que me parece más engorroso.
Al principio hice Web Components directos en un entorno sin dependencias, pero después al pasarme a LitElement todo se volvió mucho más cómodo.
Eso sí, aunque Shadow DOM es el valor predeterminado, a veces termina generando más problemas, así que ahora uso LitElement sin Shadow DOM.
La mayor ventaja es que está construido sobre una base estable.
Como los Web Components nativos tienen soporte estable en todos los navegadores, uno puede concentrarse en desarrollar sin el riesgo de tener que cambiar de framework.
Ojalá más equipos lo intentaran.
Por cierto, también recomiendo este video de HTTP 203 sobre Lit.
Angular es demasiado pesado, y React se siente como algo diseñado para las limitaciones de navegadores antiguos que ahora sigue existiendo más por inercia que por otra cosa.
Comparado con el boilerplate de Angular o la complejidad de hooks en React, se siente mucho más intuitivo.
Lástima que no haya conseguido popularidad.
En la práctica, siento que con
+ Web Componentsbasta.Pero me da curiosidad saber qué ventaja tendría rehacerlos en Lit en vez de dejarlos en Vue.
El manejo de estado con ref/reactive en Vue 3 es potente, y se puede testear sin depender del DOM.
La reactividad de Lit funciona a nivel de widget, así que hay que manejar manualmente los disparadores de actualización.
Vue tiene un ciclo de vida simple, mientras que en Lit hay que estar pendiente de varios callbacks y eso facilita que aparezcan bugs.
Si no hay una razón especial, conviene más enfocarse en desarrollar funcionalidad, y cambiar de stack casi no tiene impacto para los usuarios.
Vue es un framework, así que tiene más funciones; Lit implementa las cosas más pegado a las API nativas.
Vue requiere build, pero Lit se puede cargar en runtime.
Vue también puede compilar a otros targets, mientras que Lit está enfocado solo en Web Components y por eso se siente más limpio.
Al final, lo más importante es usar la tecnología con la que el equipo esté más familiarizado.
Al consumidor no le importa la implementación interna; lo que importa es el tamaño y la API.
De todos modos, otras personas terminarán creando adaptadores para usarlo en sus propios entornos.