Kürzlich ist eine Flut von Web Components-Nachrichten auf meinen Schreibtisch gekommen, also dachte ich, ich fasse sie hier zusammen.
Meiner Meinung nach ist einer der besten Anwendungsfälle für Web Components Pattern Libraries. Anstatt zum Beispiel <ul class="nav nav-tabs"> zu verwenden, wie man es in Bootstrap tun würde, oder <div class="tabs">, wie man es in Bulma tun würde, würde man ein benutzerdefiniertes Element wie <designsystem-tabs> verwenden.
Die neue Shoelace-Bibliothek verwendet den sl-Namensraum für ihre Komponenten. Es ist eine komplette Pattern Library, die vollständig in Web Components implementiert ist. Die Tabs dort sind also <sl-tab-group>-Elemente.
Warum ist das gut? Nun, zum einen bringt es ein Komponentenmodell mit sich. Das bedeutet, wenn Sie an einer Komponente arbeiten, hat diese eine Vorlage und ein Stylesheet, die zusammen liegen. Wenn man unter die Haube von Shoelace schaut, kann man sehen, dass alles auf Stencil basiert.
Ein weiterer Vorteil ist, dass Komponenten den Shadow DOM verwenden können (und auch tun). Dies bietet eine Form der Isolation, die direkt von der Web-Plattform stammt. Für CSS-Leute wie uns bedeutet dies, dass das Styling für einen Tab in der Tab-Komponente mit einer .tab-Klasse (hey, wow, cool) erfolgt, aber in dieser Komponente isoliert ist. Selbst mit einem so generischen Namen kann ich nicht versehentlich eine andere Komponente auf der Seite beeinflussen, die diese generische Klasse verwendet, noch kann externes CSS in die Innereien hier eingreifen. Der Shadow DOM ist eine Art Sicherheitsmauer, die verhindert, dass Stile nach außen lecken oder nach innen sickern.
Ich habe auch das FAST-Framework¹ gesehen, das ebenfalls ein Satz von Komponenten ist. Es hat Tabs, die als <fast-tabs> definiert sind. Das erinnert mich an eine weitere Sache, die ich am Ansatz von Web Components als Pattern Library mag: Es fühlt sich API-gesteuert an, beginnend schon mit dem Namen der Komponente selbst, was buchstäblich das ist, was man im HTML verwendet. Die Attribute dieses Elements können völlig frei erfunden sein. Es scheint der aufkommende Standard zu sein, dass man die Attribute, die man ebenfalls erfindet, um die Komponente zu steuern, nicht einmal mit einem data-*-Präfix versehen muss. Wenn ich also eine Tabs-Komponente erstellen würde, könnte sie so aussehen: <chris-tabs active-tab="lunch" variation="rounded">.
Der vielleicht größte Akteur, der Web Components für eine Pattern Library verwendet, ist Ionic. Ihre Tabs sind <ion-tabs>, und man kann sie verwenden, ohne ein anderes Framework einzubinden (obwohl sie neben ihrem eigenen Stencil auch Angular, React und Vue unterstützen). Ionic hat viele Fortschritte bei dieser Web Components-Sache gemacht, zuletzt mit der Unterstützung von Shadow Parts. Hier erklärt Brandy Carney noch einmal die Kapselung:
Der Shadow DOM ist nützlich, um zu verhindern, dass Stile aus Komponenten herauslecken und unbeabsichtigt auf andere Elemente angewendet werden. Zum Beispiel weisen wir unserer
ion-button-Komponente die Klasse.buttonzu. Wenn ein Ionic Framework-Benutzer die Klasse.buttonfür eines seiner eigenen Elemente festlegen würde, würde es in früheren Versionen des Frameworks die Ionic-Button-Stile erben. Daion-buttonjetzt eine Shadow Web Component ist, ist dies kein Problem mehr.Aufgrund dieser Kapselung können Stile jedoch auch nicht in innere Elemente einer Shadow-Komponente eindringen. Das bedeutet, dass ein Benutzer, wenn eine Shadow-Komponente Elemente innerhalb ihres Shadow-Trees rendert, diese inneren Elemente nicht mit seinem CSS ansprechen kann.
Die Kapselung ist eine gute Sache, aber sie macht das Styling tatsächlich "schwieriger" (bewusst). Es gibt ein wichtiges CSS-Konzept zu wissen: CSS Custom Properties durchdringen den Shadow DOM. Es wurde jedoch entschieden – und ich denke zu Recht –, dass die "Variabilisierung" jedes einzelnen Elements in einem Designsystem kein kluger Weg ist. Stattdessen geben sie jedem Teil des HTML im Shadow DOM einen Part, wie <div part="icon">, was uns dann die Möglichkeit gibt, mit CSS von außen "hineinzureichen", wie custom-component::part(icon) { }.
Ich denke, part-basierte Styling-Hooks sind größtenteils in Ordnung und ein guter Weg für Pattern Libraries wie diese, aber ich gebe zu, dass mich ein Teil davon stört. Die Selektoren funktionieren nicht so, wie man es erwarten würde. Man kann zum Beispiel keine Dinge bedingt auswählen. Man kann auch keine Kinder auswählen oder die Kaskade verwenden. Mit anderen Worten, es ist nur ein Einzelfall, oder als würde man mit der Hand direkt durch eine Membran greifen. Man kann nach vorne greifen und entweder das Ding schnappen oder nicht, aber man kann nichts anderes tun.
Apropos Dinge, die Leute stören: Andrea Giammarchi hat einen guten Punkt über den aktuellen Zustand von Web Components gemacht
Jede einzelne Bibliothek, die neu startet, einschließlich meiner, schlägt vor, dass wir die Bibliothek importieren müssen, um ein "portables Custom Element" zu definieren.
Google empfiehlt immer LitElement. Microsoft möchte, dass Sie FASTElement verwenden. Stencil hat sein eigenes Component. hyperHTML hat sein eigenes Component. Niemand verwendet "rohe" Web Components. Das ist seltsam! Was mich am schlimmsten daran stört, ist, dass Web Components eigentlich dieses "native Plattform"-Ding sein sollen, was bedeutet, dass wir uns nicht auf eine bestimmte Technologie einlassen müssen, um sie zu nutzen. Wenn wir das tun, sind wir genauso davon abhängig, als würden wir einfach React oder etwas anderes verwenden.
Andrea hat einige Ideen in diesem Artikel, einschließlich der Verwendung von einer neuen und kleineren Bibliothek. Ich denke, ich würde gerne eine Pattern Library sehen, die überhaupt keine Bibliothek verwendet.
- FAST nennt sich auf der Homepage in aufeinanderfolgenden Sätzen "interface system" und dann "UI framework". Shoelaces nennt sich "library", aber ich nenne es "pattern library". Ich finde "design system" ist der am häufigsten verwendete Begriff, um das Konzept zu beschreiben, aber oft breiter als eine spezifische Technologie verwendet. FAST verwendet diesen Begriff im Code selbst für das Wrapper-Element, das das Thema steuert. Ich würde sagen, die Terminologie rund um all diese Dinge ist noch lange nicht festgelegt.
Haben Sie sich schon https://haxtheweb.org angesehen?
Und Orte wie BYU verwenden Vanilla WCs >> http://webcomponents.byu.edu
Dieses Fast-Framework ist wunderschön! Auf jeden Fall einen Versuch wert… sie haben tolle Arbeit mit der Website geleistet… Ist es von Microsoft? Wie unterscheidet es sich von Fluent UI?
Ja, FAST wird von einem Team bei Microsoft entwickelt und gepflegt, das mit Edge zusammenarbeitet (Ein Großteil der Benutzeroberfläche des neuen Edge-Browsers basiert auf einer Version von FAST). Dennoch ist das Hauptziel von FAST, jedem Entwickler zu helfen, die Einführung moderner Web-Plattformfunktionen wie Web Components zu beschleunigen. Zu diesem Zweck ist FAST nicht an ein bestimmtes Designsystem oder Framework gebunden, sodass es für möglichst viele Entwickler nützlich sein kann. Weitere Informationen darüber, wie FAST und Fluent UI zusammenhängen, werden bald verfügbar sein, aber ich denke, Sie werden es mögen (unnötig zu sagen, wir sind Partner).
PatternFly Elements, Red Hats Open-Source-Designsystem, ist ein Vanilla-Webkomponenten-System. Wir verwenden benutzerdefinierte Eigenschaften für das Theming und einen Light-DOM-as-Data-Ansatz, der bedeutet, dass Komponenten sich anmutig verbessern.
Wow, Shadow Parts klingen großartig!
Verdammt, ich muss mir Web Components vielleicht noch einmal ansehen.
Haben sie gelöst, wie man einen CSS-Reset über die Komponenten hinweg durchführt? Ich glaube, ich habe eine spezielle Reset-Datei importiert, was wahrscheinlich nicht gut war!
Die Verwendung einer Bibliothek wie LitElement ist in keiner Weise mit der Verwendung von React vergleichbar. Sie zwingt dem Benutzer der Komponente nichts auf, außer dem Webstandard. LitElement bietet eine Leistungsverbesserung zur Rendering-Zeit sowie syntaktischen Zucker zur Entwicklungszeit.
WebComponents mögen ihren Anwendungsfall haben, aber ich hasse es, sie in UI-Frameworks zu sehen. Sie widersprechen dem Webdesign! Sie sind schwierig zu debuggen und zu stylen und eine Plage zu bearbeiten. Sie sind eine Lösung für Probleme von gestern und eine unnötige Komplikation eines bereits überentwickelten Stacks.
Gute Zusammenfassung, danke!
Zum Thema "Niemand verwendet rohe Web Components": Soweit ich weiß, sind die Spezifikationen als "Low-Level"-API gedacht, die mit einer Art Abstraktion darüber verwendet werden soll. Beim Schreiben einer "rohen" Web Component schreibt man oft VIEL Boilerplate-Code. Deshalb greife ich zu einer Abstraktion wie LitElement.
Es stimmt, dass man sich auf eine Art Vendor Lock-in einlässt. Aber das gilt nur für diese spezielle Komponente. Man kann seine Tabs in Stencil und seine Buttons in LitElement schreiben und gleichzeitig einige Ion-Komponenten daneben verwenden.
Natürlich kann man einige Widgets auf einer Website in Vue und andere in React bauen, aber dann hat man beide Laufzeiten. Wenn man Web Components einfach als seine Komponenten verwendet, liefern die meisten Bibliotheken/Frameworks keine große Laufzeit mit.
Kurz gesagt: Für mich überwiegt der Vorteil der Entwicklererfahrung den Nachteil eines kleinen Lock-ins. Und das, ohne die Benutzererfahrung zu beeinträchtigen, da der Overhead des Frameworks sehr gering ist.
Das müssen Sie nicht! Sie können
<fast-tabs>und<sl-tabs>problemlos auf derselben Seite verwenden.Chris, tolles Update zur Web Components-Community. Mir gefallen Ihre Gedanken zu Komponenten, die keine Bibliothek verwenden, und ich frage mich, ob Sie https://modest-bhaskara-e8742f.netlify.app/ von @passle_ auf Twitter gesehen haben. Es verzichtet nicht nur auf die Abhängigkeit von JavaScript-Bibliotheken, sondern zielt auch darauf ab, dasselbe mit CSS-Bibliotheksabhängigkeiten zu tun und es wirklich einfach zu machen, "eigene Stile mitzubringen".
Ich hoffe, Sie schauen es sich an, aber ich bin auch an der Idee interessiert, die Sie hier teilen, dass wir uns durch die Verwendung einer Bibliothek am Ende "genauso abhängig machen, als würden wir einfach React oder etwas anderes verwenden". Wenn ich
<FrameworkFancytTabs/>wählen würde, um in meiner Anwendung zu laufen, müsste ich einen Weg finden, dieses Framework in meiner größeren Anwendung auszuführen (vielleicht war es schon da, vielleicht nicht). Und weil Framework-basierte Komponenten eine Abhängigkeit sind, die Sie zu dem Framework hinzufügen, das die Elternkomponente erzwingt, zu der Sie sich entscheiden, werden Sie immer existieren, also haben wir Lock-in. Wenn Sie sich jedoch mit irgendeinem der hier aufgeführten benutzerdefinierten Elemente befassen, z. B.<fancy-tabs></fancy-tabs>, ist die Bibliothek, die zu seiner Erstellung verwendet wird, eine Abhängigkeit dieses Elements. Wenn Sie dieses Element also nehmen oder lassen, gilt dasselbe für die Bibliotheksabhängigkeit. Es gibt natürlich benutzerdefinierte Elemente, die eine API offenbaren, die genauso an die Bibliothek gebunden ist wie ein Framework, aber das ist das Ergebnis eines API-Designs, das als Code-Smell betrachtet werden kann und sollte, und nicht, dass die Entscheidung, sich auf eine Bibliothek zu verlassen, Lock-in erzwingt.Ich stimme zu, dass die von uns gewählten Bibliotheken innerhalb einer Komponente, also als Komponentenentwickler, eine Form von Lock-in verursachen können und auch verursachen, obwohl sie glücklicherweise kleiner ist und, wie Sie in diesem Artikel nicht erwähnt haben, gekapselt ist. Auf diese Weise hoffe ich, dass eine leistungsfähigere Renderer-ähnliche API für die Plattform vereinbart werden kann. Haben Sie sich mit https://docs.google.com/document/d/1UVtF1gM6XY-_NKm2_c045K803U3ZTjfyluLeToJlIUk/preview oder https://github.com/w3c/webcomponents/blob/gh-pages/proposals/Template-Instantiation.md beschäftigt, zwei wirklich interessante Vorschläge, die diese Art von Funktionalität nativ in den Browser bringen würden?
Das ist ein großartiger Beitrag, aber ich wollte etwas hervorheben.
„Web Components sollen dieses ‚native Plattform‘-Ding sein, was bedeutet, dass wir uns nicht auf eine bestimmte Technologie einlassen müssen, um sie zu nutzen.“
Web Components wurden als Teil der Extensible Web-Bewegung entwickelt und sollten keine Bibliotheken/Frameworks ersetzen. Die Idee war, Primitiven zu schaffen, auf denen Bibliotheken aufbauen konnten, damit sie weniger Code ausliefern konnten. Es war immer die Absicht, dass man eine Bibliothek damit verwendet.
Theoretisch schafft dies kein Lock-in, da die Schnittstelle für die Komponenten standardmäßige DOM-APIs (Attribute, Eigenschaften, Ereignisse) sind. Das bedeutet, Sie können eine Shoelace-Komponente mit einer Ion-Komponente verwenden und obwohl sie mit unterschiedlichen Bibliotheken erstellt wurden, können sie immer noch kommunizieren und koexistieren.
Ob die Strategie, Low-Level-Primitive für Bibliotheken zu schaffen, auf denen aufgebaut werden kann, letztendlich erfolgreich sein wird, bleibt abzuwarten. Vielleicht sollten Web Components schickere Abstraktionen haben, damit man keine Bibliothek braucht (ich weiß es wirklich nicht), aber der Hauptgrund dafür ist, dass alle, die die APIs entworfen haben, zu dieser Zeit wussten, dass die Wahrscheinlichkeit groß ist, dass wir die Abstraktionen falsch machen. Wir hatten einfach noch nicht genug Leute gesehen, die Custom Elements bauen, um zu wissen, welche zusätzlichen Annehmlichkeiten sie brauchen würden.
Als Beispiel gab es einen Versuch, Data Binding zu standardisieren (der Vorschlag hieß Model Driven Views oder MDV), der auf den Zwei-Wege-Bindungen von Angular.js basierte. Dieser Vorschlag wurde verworfen, und wie es sich herausstellt, hat sich die Welt von Zwei-Wege-Bindungen zu einem unidirektionalen Datenflussmuster (React Props/Redux) entwickelt.
Nach einigen Jahren werden einige Dinge klarer. Vielleicht, wenn eine Bibliothek, die auf Web Components basiert, ein massiver Erfolg wird (wie jQuery-Niveau oder Erfolg), würde uns das "den Weg" zeigen, und diese Abstraktionen könnten standardisiert werden.
Ich denke, der große Unterschied ist, dass man mehrere dieser Web Components kombinieren kann.
Sie wollen
ion-tabsundfast-tabsauf derselben Seite verwenden? Klar, kein Problem, machen Sie ruhig.Man kann also vielleicht nicht viele Leute sehen, die
class MyElement extends HTMLElementdirekt verwenden, aber das spielt keine Rolle, solange die Basisklassen "Erweiterungen" vonHTMLElementsind. Und das ist bei allen der Fall – LitElement, Ionic, Fast, …Man kann es als eine Art Zucker für HTMLElement betrachten. Es hilft mir, Web Components so zu schreiben, wie ich es bevorzuge. Und jeder kann seinen eigenen Zucker wählen. Keine bösen Gefühle.
PS: Das ist ein großer Unterschied zu Frameworks… da ist die Verwendung einer Angular-Tabs-Implementierung in einer React-App wahrscheinlich nicht ratsam
Toller Artikel Chris. Wir haben Stencil (ich bin CEO von Ionic) erstellt, daher ein paar Gedanken dazu.
Zu Shadow DOM: Ich stimme zu, es ist nicht ideal, wenn es um einfaches Styling geht, aber wir sind sehr begeistert von Shadow Parts. Eine Sache, die in der Shadow DOM-Diskussion fehlt, ist, dass sie es Ihnen ermöglicht, eine "Public API" um Stile herum zu erstellen, die es Benutzern erleichtert, auf neue Versionen der Komponenten umzusteigen, ohne größere Breaking Changes. Zum Beispiel habe ich als Benutzer von Bootstrap in der Vergangenheit aus erster Hand erfahren, wie problematisch ein auf Klassenselektoren basierendes Stilsystem ohne erzwungene Isolation sein kann, da Sie sehr oft bei bestimmten Versionen stecken bleiben.
Was den letzten Absatz über Lock-in betrifft, so glaube ich, dass die Semantik des Lock-ins hier grundsätzlich anders ist bei einer Web-Component-Bibliothek/Compiler wie Stencil als bei einem Framework wie React oder Angular, insbesondere aus Sicht des Konsumenten (d.h. eines Benutzers, der eine in Web Components erstellte Bibliothek übernimmt).
Ja, der Web Component-Autor muss sich entscheiden, diese Bibliotheken zu verwenden, aber die Konsumenten können frei wählen, welches Framework oder welche Bibliothek sie wollen. Dies ist ein grundlegender Unterschied zwischen Web Components und dem klassischen Framework-Komponentenansatz. Und Stencil geht noch einen Schritt weiter, indem es automatisch native Bindungen für React, Angular, Vue (und jedes zukünftige beliebte Framework) generiert, sodass Konsumenten dieser Frameworks die Komponenten auf eine für das Framework native Weise nutzen können.
Nach unserer Erfahrung war der Übergang zur Zielsetzung von Web Components transformativ. Wir sehen eine starke Stabilität in unserem Ausgabe-Target (da WCs standardisiert sind), aber jetzt kann eine viel größere Gruppe der Web-Welt unsere Komponenten nutzen. Wir hoffen, dass andere diesen Ansatz ausprobieren und auch die Vorteile sehen.
Vielen Dank, Max, für Stencil! Ich habe buchstäblich mein erstes erfolgreiches Geschäft damit aufgebaut: https://spx.dev und es ausschließlich für die Entwicklung einer Anwendung für mein Abschlussprojekt verwendet. Ich habe es natürlich mit einer perfekten Punktzahl bestanden. :-)
Stencil for the win!
Ja, wie Max sagte, der Endbenutzer eines Custom Elements kann dieses Element in jedem Framework verwenden, unabhängig davon, welche Custom-Element-Bibliothek der Elementautor verwendet hat. Der Endbenutzer kann das Element nehmen und es in eine React-App, eine Vue-App, eine Angular-App, eine Svelte-App oder eine alte jQuery-App einfügen.
Es gibt ein hohes Maß an Interoperabilität bei der Verwendung von Custom Elements durch Endbenutzer, und das mit einem geringeren Fußabdruck als Nicht-Custom-Element-Bibliotheken und -Frameworks (siehe Kommentar von Rob Eisenberg) – es ist also eine Win-Situation, auch wenn bestimmte Bibliotheken im Einsatz sind.
Um den Kommentar von Rob Dodson zu erweitern: Die aktuellen Custom Elements bieten eine Reihe von Low-Level- primitiven APIs, auf die wir uns vertrauensvoll verlassen können und wissen, dass sie nicht verschwinden werden (das ist die Hoffnung). Dann kann es passieren, dass mit der Zeit die häufigsten und nützlichsten Muster, die Custom-Element-Bibliotheken immer wieder neu erstellen, dazu beitragen, die nächsten Erweiterungen der Web-APIs zu leiten, und die neuen APIs werden es Custom-Element-Autoren ermöglichen, mehr zu erreichen und dabei noch weniger Bibliotheken zu verwenden.
Es gibt Diskussionen über neue Features wie deklarative Custom Elements
https://github.com/w3c/webcomponents/blob/gh-pages/proposals/Declarative-Custom-Elements-Strawman.md (Diskussionen finden auch im Issues-Tab dieses Repos statt)
oder Data Binding für
<template>-Elemente (stellen Sie sich zum Beispiel die Verwendung von Handlebars oder einer ähnlichen Syntax für reaktive und deklarative DOM-Updates vor). Beispiele und Teilnahme an der Diskussion finden Sie hierhttps://discourse.wicg.io/t/extension-of-template/447
Sobald die Bibliotheken geklärt haben, welche Muster gut und welche nicht sind, können die besten Muster zuversichtlicher in das Web integriert werden.
Ein guter Ort, um nachzusehen, welche Muster bei der Performance gewinnen, ist der JS-Frameworks-Benchmark von Stefan Krause
https://krausest.github.io/js-framework-benchmark/current.html
Was die schnellsten Frameworks dort gemeinsam haben, ist, dass sie feingranulare Update-Mechanismen anstelle von Virtual-DOM-Diffing verwenden. Sie werden eine Vielzahl neuer Bibliotheken sehen, die schneller sind als React, Vue oder Angular, aber dennoch eine gute Entwicklererfahrung bieten.
Bibliotheken treiben immer noch die Grenzen an: Es wäre schlecht für das Web (zum Beispiel), wenn das Web einen VDOM-Ansatz übernimmt, nur damit das Konzept an Zugkraft verliert.
Insbesondere Solid.js aus diesem Benchmark ist sehr raffiniert und schnell. Ich habe es genommen und ein Custom-Element-System darauf aufgebaut, und jetzt ist @lume/element eines der einfachsten und schnellsten verfügbaren Custom-Element-Systeme.
https://github.com/lume/element
Ich freue mich über jedes Feedback!
TLDR: Ja, Bibliotheken machen die Erstellung von Custom Elements einfacher und benutzerdefinierte Elementautoren möchten vielleicht eine wählen, aber die Interoperabilität, die Endbenutzer erhalten, ist unglaublich robust und verhindert, dass Endbenutzer an ein bestimmtes Framework gebunden sind. In Zukunft können Custom Elements noch einfacher zu schreiben sein, auch ohne Bibliotheken, und Sie können dazu beitragen, indem Sie sich an den Diskussionen in den oben genannten GitHub- oder WICG-Foren beteiligen.
Toller Artikel, aber eine kleine Korrektur am Fußnotentext: Die FAST-Website nennt sich ein "interface system" und sagt im nächsten Absatz, dass sie "mit jedem modernen UI Framework" (Angular, React, Vue usw.) verwendet werden kann, nicht dass sie ein UI Framework ist.
Außerdem habe ich das vielleicht missverstanden, aber es ist erwähnenswert, dass Sie FAST Element nicht verwenden müssen, um FAST Komponenten zu verwenden. Sie möchten FAST Element vielleicht verwenden, wenn Sie Ihre eigenen Komponenten erstellen würden. Sie könnten jedoch FAST Komponenten verwenden und diese dann mit nativem Webkomponenten-Code, mit Lit oder wie auch immer Sie möchten, zusammensetzen. Der Hauptgrund, warum FAST keine "geraden" Web Components verwendet, ist, dass immer noch eine riesige Menge an Boilerplate und redundantem Code benötigt würde, so dass gängige Funktionen in der FAST-Element-Bibliothek zusammengefasst sind. Dennoch stimme ich zu, dass es großartig wäre, wenn die Plattform diese Funktionen einfach anbieten würde, damit wir FAST Element gar nicht bräuchten.
Wenn ich über Web Components spreche, erinnere ich die Leute daran, dass das, was wir im Browser haben, bewusst als eine Reihe von sehr Low-Level-APIs ohne Meinungen entwickelt wurde. Ziel war es, dass Bibliotheks- und Framework-Autoren kommen und eine meinungsbildende Komfortschicht über die Primitiven legen. Genau das haben FAST, Lit, Stencil usw. alle getan.
Es ist wichtig zu beachten, dass dies nicht dasselbe ist wie der JavaScript-Framework-Ansatz. Web Component-Bibliotheken sind standardmäßig interoperabel. Wenn Sie mit FAST beginnen und dann eine coole Komponente finden, die mit Lit erstellt wurde, können Sie sie zusammen verwenden. Es gibt damit kein Problem. Und aufgrund der Tatsache, dass wir alle auf Webstandards aufbauen, implementieren wir viel weniger Code, was zu kleineren Bibliotheken führt. Tatsächlich können Sie sogar 2-3 Web Component-Bibliotheken zusammen verwenden und etwas erhalten, das immer noch kleiner ist als viele Frontend-Frameworks. Hier ist eine andere Denkweise: Die minifizierte und komprimierte Größe von JQuery beträgt etwa 29 KB. Sie können sowohl FASTElement als auch LitElement in diesen Bereich passen und haben noch viel Platz übrig, vielleicht sogar für eine dritte WC-Bibliothek. Hier ist noch etwas, das wir bei der Implementierung von FAST festgestellt haben. Unsere gesamte FASTElement-Bibliothek, plus unsere adaptive Designsystemschicht, plus alle unsere Kernkomponenten der Version 1, hatten ungefähr die gleiche Größe wie allein React + React.DOM. Wenn man bedenkt, welchen Wert man pro KB mit Web Components erhält, ist er typischerweise viel höher als bei Nicht-Web-Component-Optionen.
In den letzten Jahren gab es viel Bewegung in der JavaScript-Framework-Landschaft. Mit Web Components arbeiten wir zusammen, um eine offenere und interoperablere Lösung zu schaffen, die Designer und Entwickler in die Lage versetzt, bessere Apps zu erstellen, ohne immer wieder die Kosten für JavaScript-Frameworks tragen zu müssen.
Die Web Components von htmlelements.com und Vaadin könnten in einem zukünftigen ähnlichen Artikel erwähnenswert sein. Sie haben Web Components sogar vor der Veröffentlichung des v1-Specs für Custom Elements entwickelt.
Hier ist mein Versuch, eine Namespace-Registry zu erstellen
https://github.com/nuxodin/web-namespace-registry