- Fügt auf Basis des Web-Component-Standards nur Reaktivität, deklarative Templates und minimalen Boilerplate-Code hinzu
- Mit einer geringen Größe von etwa 5 KB sowie schnellem Rendering werden Leistung und Ladegeschwindigkeit optimiert, indem nur die geänderten UI-Bereiche aktualisiert werden
- Alle Lit-Komponenten sind native Web Components und können unabhängig vom Framework überall dort wiederverwendet werden, wo HTML eingesetzt werden kann
- Nutzt das Shadow DOM, um den Geltungsbereich von Styles standardmäßig zu begrenzen, CSS-Selektoren zu vereinfachen und Konflikte mit anderen Styles zu vermeiden
- Modelliert mit Reactive Property die Komponenten-API und den internen Zustand und unterstützt effizientes erneutes Rendering bei Änderungen von Eigenschaften
- Schnell und einfach dank Templates auf Basis von Tagged template Literals
- Einsetzbar in verschiedensten Webprojekten – von gemeinsam genutzten Komponenten und Design-Systemen bis hin zum Aufbau kompletter Apps mit weniger Vendor Lock-in und besserer Wartbarkeit
- Tutorial verfügbar
- GitHub
4 Kommentare
Das empfinde ich seit drei Jahren so: Für den direkten Einsatz von Vanilla Web Components ist es schnell, und es wirkt wie ein Framework für die Übergangsphase, aber langsam..
Was soll das heißen?
Ich entwickle Betriebstools ausschließlich mit Web-Standards-Web-Components und
lit-html, und mir gefällt, dass die Menge an Wissen, die man dafür kennen muss, auf ein Minimum reduziert ist. Von den Funktionen inlit-htmlnutze ich im Grunde nur Event-Handler-Binding und Loop-Templating. (Für den Rest reichen Web-Standards eigentlich aus ...) Es ist zwar etwas umständlich, dass man bei Änderungenrenderdirekt aufrufen muss, aber statt dass Änderungen an Variablen automatisch erkannt werden und dadurch implizites Verhalten entsteht, kann ein expliziter Aufruf in mancher Hinsicht auch hilfreich sein. Da es sich um Betriebstools handelt, hat die Unterstützung für verschiedenste Umgebungen eine niedrigere Priorität, deshalb empfinde ich das vielleicht auch so.Hacker-News-Kommentare
Wir nutzten bereits ein schwergewichtiges Framework, und dass jemand Lit hinzugefügt hat, nur um noch eine Zeile mehr im Lebenslauf zu haben, war eine große Belastung.
Vor allem Shadow DOM hat die **Accessibility-(A11y-)**Probleme noch verschärft. Durch den getrennten
id-Scope wurden Verknüpfungen wielabel-forunddescribe-bykaputtgemacht, was uns viel Ärger bereitet hat.Natürlich lag ein Teil davon auch an den fehlenden Skills unseres Teams.
Styles sind zwar gescoped, aber wichtige Dinge wie Schriftgrößen sind davon ausgenommen, weshalb bei jedem Austausch immer wieder kleine Regressionen entstanden.
Auch die DX hat deutlich gelitten. Ich hoffe, dass das Tooling besser wird, aber im Moment ist das Ganze einfach nur anstrengend.
Tatsächlich scheint es häufiger zu sein, dass Leute einfach etwas Neues ausprobieren wollen und es ohne große Rationalisierung einführen.
In komplexen Apps mit ineinander verschachtelten Komponenten, die miteinander interagieren, hat sie gut funktioniert. Sie ist React ähnlich, aber viel browsernativer, hat weniger Boilerplate und rendert schneller.
Ich verstehe kaum, warum Lit nicht populärer ist.
Die Kernfunktionen sind überraschend einfach und stützen sich größtenteils auf Plattform-APIs.
Deshalb kann es im Grunde jeder selbst implementieren, und genau diese Einfachheit halte ich für einen großen Wert.
Zur Referenz: Meine alternative Implementierung ist https://github.com/ruphin/lite-html
lit-htmlist wirklich nützlich, deshalb verwende ich es in fast allen privaten Projekten.Dass man es direkt über ein CDN laden und ohne Build-Schritt experimentieren kann, ist ebenfalls ein großer Vorteil.
Es ist nicht so schwergewichtig wie andere Frameworks, und es fühlt sich einfach an wie Vanilla JS + HTML, also mit kaum kognitiver Last.
Shadow DOM ist im Grunde ein privater Tree, der den internen DOM einer Komponente isoliert.
Dadurch wird das Konzept von Slots möglich, womit sich wirklich zusammensetzbare Komponenten bauen lassen.
Das Problem ist, dass die Style-Kapselung bei der Integration in bestehende Systeme zu einer großen Hürde wird.
Deshalb habe ich einen Vorschlag namens Open Styleable Shadow Roots gemacht: Externe Styles dürfen nach innen durchfließen, während Slots erhalten bleiben. Ich versuche derzeit noch, die Browser-Vendoren davon zu überzeugen.
Dazu habe ich auch einen Artikel geschrieben: https://medium.com/gitconnected/getting-started-with-web-com...
Manchmal frage ich mich wirklich, warum es sich nicht weiter verbreitet hat.
Ursprünglich basierte es auf Backbone.js, dann haben wir schrittweise von
lit-htmlzulit-elementund schließlich zu Lit migriert.Heute wird es als Web Component namens
<converse-root />ausgeliefert und lässt sich dadurch auch gut in andere Frameworks wie React integrieren.GitHub: https://github.com/conversejs/converse.js / Demo: https://chat.conversejs.org/
Wenn man auf dem Server ein Template-System wie JSX verwendet, ist das völlig angenehm, und auf dem Client ist es einfach nur JS, sodass man sich keine Sorgen über Upgrades machen muss.
Allerdings sind die nativen APIs zu Low-Level, sodass die DX zu wünschen übrig lässt, und Lit legt darauf eine deklarative Reaktivitätsschicht.
Es löst die lästigen Teile, die man sonst selbst bauen müsste, auf elegante Weise.
html-Template-Literalen von Lit und JSX nie einen großen Unterschied gespürt.Eher im Gegenteil: JSX ist lästiger, weil dafür ein Compile-Schritt nötig ist.
Anfangs habe ich Web Components in einer Umgebung ohne Abhängigkeiten direkt selbst gebaut, aber später war der Wechsel zu LitElement deutlich angenehmer.
Shadow DOM ist zwar der Standard, hat aber eher zusätzliche Probleme verursacht, deshalb verwende ich LitElement inzwischen ohne Shadow DOM.
Der größte Vorteil ist, dass es auf einem stabilen Fundament steht.
Native Web Components werden von allen Browsern zuverlässig unterstützt, sodass man sich auf Entwicklung konzentrieren kann, ohne das Risiko eines Framework-Wechsels.
Ich würde mir wünschen, dass mehr Teams es ausprobieren.
Übrigens kann ich auch dieses HTTP 203-Video über Lit empfehlen.
Angular ist viel zu schwergewichtig, und React wirkt wie etwas, das für die Einschränkungen alter Browser entworfen wurde und heute nur noch aus Trägheit weiterlebt.
Im Vergleich zur Boilerplate von Angular oder der Hook-Komplexität von React ist es viel intuitiver.
Schade nur, dass es nie richtig populär geworden ist.
Im Grunde reicht für mich die Kombination aus
+ Web Components.Mich interessiert, welchen Vorteil es hätte, sie statt mit Vue noch einmal mit Lit neu zu bauen.
Das ref/reactive-State-Management von Vue 3 ist stark und lässt sich ohne DOM-Abhängigkeiten testen.
Die Reaktivität von Lit ist eher auf Widget-Ebene, sodass man Update-Trigger selbst verwalten muss.
Der Lifecycle von Vue ist einfacher, während man bei Lit mehrere Callbacks im Blick behalten muss, was Bugs begünstigen kann.
Wenn es keinen besonderen Grund gibt, ist es besser, sich auf die Feature-Entwicklung zu konzentrieren; ein Wechsel des Tech-Stacks hat für Nutzer fast keinen spürbaren Effekt.
Vue ist ein Framework und bietet mehr Funktionen, Lit setzt näher auf den nativen APIs auf.
Für Vue braucht man einen Build, Lit kann dagegen auch zur Laufzeit geladen werden.
Vue kann auch auf andere Targets kompilieren, Lit ist dagegen auf Web Components spezialisiert und dadurch aufgeräumter.
Letztlich ist am wichtigsten, womit das Team besser vertraut ist.
Den Konsumenten ist die interne Implementierung egal; wichtig sind nur Größe und API.
Andere werden sich ohnehin Adapter für ihre eigene Umgebung bauen.