Entfesseln Sie schnellere Web-Performance mit der Selective Hydration von React 18. Dieser umfassende Leitfaden erlĂ€utert priorisiertes Laden, Streaming SSR und die praktische Umsetzung fĂŒr ein globales Publikum.
React Selective Hydration: Ein tiefer Einblick in das prioritÀtbasierte Laden von Komponenten
Im unermĂŒdlichen Streben nach ĂŒberlegener Web-Performance navigieren Frontend-Entwickler stĂ€ndig einen komplexen Kompromiss. Wir wollen reichhaltige, interaktive Anwendungen, aber sie mĂŒssen auch sofort laden und ohne Verzögerung reagieren, unabhĂ€ngig vom GerĂ€t oder der Netzwerkgeschwindigkeit des Benutzers. Jahrelang war Server-Side Rendering (SSR) ein Eckpfeiler dieser BemĂŒhungen, das schnelle anfĂ€ngliche SeitenladevorgĂ€nge und starke SEO-Vorteile lieferte. Herkömmliches SSR hatte jedoch einen erheblichen Engpass: das gefĂŒrchtete âAlles-oder-nichtsâ-Hydrationsproblem.
Bevor eine SSR-generierte Seite wirklich interaktiv werden konnte, musste das gesamte JavaScript-Bundle der Anwendung heruntergeladen, geparst und ausgefĂŒhrt werden. Dies fĂŒhrte oft zu einer frustrierenden Benutzererfahrung, bei der eine Seite vollstĂ€ndig und bereit aussah, aber auf Klicks oder Eingaben nicht reagierte â ein PhĂ€nomen, das sich negativ auf wichtige Kennzahlen wie Time to Interactive (TTI) und den neueren Interaction to Next Paint (INP) auswirkt.
Hier kommt React 18 ins Spiel. Mit seiner bahnbrechenden Concurrent-Rendering-Engine fĂŒhrte React eine Lösung ein, die ebenso elegant wie leistungsstark ist: Selective Hydration. Dies ist nicht nur eine schrittweise Verbesserung; es ist ein fundamentaler Paradigmenwechsel in der Art und Weise, wie React-Anwendungen im Browser zum Leben erweckt werden. Es geht ĂŒber das monolithische Hydrationsmodell hinaus zu einem granularen, prioritĂ€tbasierten System, das die Benutzerinteraktion in den Vordergrund stellt.
Dieser umfassende Leitfaden wird die Mechanik, die Vorteile und die praktische Umsetzung von React Selective Hydration untersuchen. Wir werden dekonstruieren, wie es funktioniert, warum es fĂŒr globale Anwendungen ein Game-Changer ist und wie Sie es nutzen können, um schnellere und widerstandsfĂ€higere Benutzererfahrungen zu schaffen.
Die Vergangenheit verstehen: Die Herausforderung der traditionellen SSR-Hydration
Um die Innovation der Selective Hydration vollstĂ€ndig zu wĂŒrdigen, mĂŒssen wir zuerst die EinschrĂ€nkungen verstehen, die sie ĂŒberwinden sollte. Werfen wir einen Blick zurĂŒck in die Welt des serverseitigen Renderings vor React 18.
Was ist Server-Side Rendering (SSR)?
In einer typischen client-seitig gerenderten (CSR) React-Anwendung empfĂ€ngt der Browser eine minimale HTML-Datei und ein groĂes JavaScript-Bundle. Der Browser fĂŒhrt dann das JavaScript aus, um den Seiteninhalt zu rendern. Dieser Prozess kann langsam sein, was dazu fĂŒhrt, dass Benutzer auf einen leeren Bildschirm starren und es fĂŒr Suchmaschinen-Crawler schwierig wird, den Inhalt zu indizieren.
SSR dreht dieses Modell um. Der Server fĂŒhrt die React-Anwendung aus, generiert das vollstĂ€ndige HTML fĂŒr die angeforderte Seite und sendet es an den Browser. Die Vorteile sind sofort ersichtlich:
- Schnellerer First Contentful Paint (FCP): Der Browser kann das HTML sofort nach Eintreffen rendern, sodass der Benutzer fast augenblicklich aussagekrÀftige Inhalte sieht.
- Verbessertes SEO: Suchmaschinen-Crawler können das serverseitig gerenderte HTML leicht parsen, was zu einer besseren Indexierung und einem besseren Ranking fĂŒhrt.
Der âAlles-oder-Nichtsâ-Hydrations-Engpass
Obwohl das anfÀngliche HTML von SSR eine schnelle, nicht interaktive Vorschau bietet, ist die Seite noch nicht wirklich nutzbar. Die in Ihren React-Komponenten definierten Event-Handler (wie `onClick`) und das State-Management fehlen. Der Prozess, diese JavaScript-Logik an das serverseitig generierte HTML anzuhÀngen, wird Hydration genannt.
Hierin liegt das klassische Problem: Die traditionelle Hydration war ein monolithischer, synchroner und blockierender Vorgang. Sie folgte einer strengen, unnachgiebigen Reihenfolge:
- Das gesamte JavaScript-Bundle fĂŒr die ganze Seite muss heruntergeladen werden.
- React muss das gesamte Bundle parsen und ausfĂŒhren.
- React durchlĂ€uft dann den gesamten Komponentenbaum von der Wurzel aus, hĂ€ngt Event-Listener an und richtet den Zustand fĂŒr jede einzelne Komponente ein.
- Erst nachdem dieser gesamte Prozess abgeschlossen ist, wird die Seite interaktiv.
Stellen Sie sich vor, Sie erhalten ein komplett montiertes, wunderschönes neues Auto, aber Ihnen wird gesagt, dass Sie keine einzige TĂŒr öffnen, den Motor starten oder auch nur hupen können, bis ein einziger Hauptschalter fĂŒr die gesamte Fahrzeugelektronik umgelegt ist. Selbst wenn Sie nur Ihre Tasche vom Beifahrersitz holen wollen, mĂŒssen Sie auf alles warten. Das war die Benutzererfahrung der traditionellen Hydration. Eine Seite konnte fertig aussehen, aber jeder Versuch, mit ihr zu interagieren, fĂŒhrte zu nichts, was zu Benutzerverwirrung und âRage Clicksâ fĂŒhrte.
Hier kommt React 18: Ein Paradigmenwechsel mit Concurrent Rendering
Die Kerninnovation von React 18 ist die Gleichzeitigkeit (Concurrency). Dies ermöglicht es React, mehrere Zustandsaktualisierungen gleichzeitig vorzubereiten und Rendering-Arbeiten anzuhalten, fortzusetzen oder abzubrechen, ohne den Hauptthread zu blockieren. Obwohl dies tiefgreifende Auswirkungen auf das client-seitige Rendering hat, ist es der SchlĂŒssel, der eine viel intelligentere Server-Rendering-Architektur freischaltet.
Concurrency ermöglicht zwei entscheidende Funktionen, die zusammenarbeiten, um Selective Hydration möglich zu machen:
- Streaming SSR: Der Server kann HTML in Teilen senden, wÀhrend es gerendert wird, anstatt auf die Fertigstellung der gesamten Seite zu warten.
- Selective Hydration: React kann mit der Hydration der Seite beginnen, bevor der vollstÀndige HTML-Stream und das gesamte JavaScript angekommen sind, und dies auf eine nicht-blockierende, priorisierte Weise tun.
Das Kernkonzept: Was ist Selective Hydration?
Selective Hydration demontiert das âAlles-oder-Nichtsâ-Modell. Anstelle einer einzigen, monolithischen Aufgabe wird die Hydration zu einer Reihe kleinerer, ĂŒberschaubarer und priorisierbarer Aufgaben. Es ermöglicht React, Komponenten zu hydrieren, sobald sie verfĂŒgbar sind, und, was am wichtigsten ist, die Komponenten zu priorisieren, mit denen der Benutzer aktiv zu interagieren versucht.
Die Hauptzutaten: Streaming SSR und `<Suspense>`
Um Selective Hydration zu verstehen, mĂŒssen Sie zuerst ihre beiden Grundpfeiler begreifen: Streaming SSR und die `<Suspense>`-Komponente.
Streaming SSR
Mit Streaming SSR muss der Server nicht warten, bis langsame Datenabrufe (wie ein API-Aufruf fĂŒr einen Kommentarbereich) abgeschlossen sind, bevor er das anfĂ€ngliche HTML sendet. Stattdessen kann er sofort das HTML fĂŒr die Teile der Seite senden, die bereits fertig sind, wie das Hauptlayout und den Inhalt. FĂŒr die langsameren Teile sendet er einen Platzhalter (eine Fallback-UI). Wenn die Daten fĂŒr den langsamen Teil bereit sind, streamt der Server zusĂ€tzliches HTML und ein Inline-Skript, um den Platzhalter durch den tatsĂ€chlichen Inhalt zu ersetzen. Dies bedeutet, dass der Benutzer die Seitenstruktur und den primĂ€ren Inhalt viel schneller sieht.
Die `<Suspense>`-Grenze
Die `<Suspense>`-Komponente ist der Mechanismus, mit dem Sie React mitteilen, welche Teile Ihrer Anwendung asynchron geladen werden können, ohne den Rest der Seite zu blockieren. Sie umschlieĂen eine langsame Komponente mit `<Suspense>` und geben eine `fallback`-Prop an, die React rendert, wĂ€hrend die Komponente lĂ€dt.
Auf dem Server ist `<Suspense>` das Signal fĂŒr das Streaming. Wenn der Server auf eine `<Suspense>`-Grenze trifft, weiĂ er, dass er zuerst das Fallback-HTML senden und das HTML der eigentlichen Komponente spĂ€ter streamen kann, wenn es fertig ist. Im Browser definieren `<Suspense>`-Grenzen die âInselnâ, die unabhĂ€ngig voneinander hydriert werden können.
Hier ist ein konzeptionelles Beispiel:
function App() {
return (
<div>
<Header />
<main>
<ArticleContent />
<Suspense fallback={<CommentsSkeleton />}>
<CommentsSection /> <!-- Diese Komponente ruft möglicherweise Daten ab -->
</Suspense>
</main>
<Suspense fallback={<ChatWidgetLoader />}>
<ChatWidget /> <!-- Dies ist ein schweres Drittanbieter-Skript -->
</Suspense>
<Footer />
</div>
);
}
In diesem Beispiel werden `Header`, `ArticleContent` und `Footer` sofort gerendert und gestreamt. Der Browser erhĂ€lt HTML fĂŒr `CommentsSkeleton` und `ChatWidgetLoader`. SpĂ€ter, wenn `CommentsSection` und `ChatWidget` auf dem Server bereit sind, wird ihr HTML zum Client gestreamt. Diese `<Suspense>`-Grenzen schaffen die Nahtstellen, die es der Selective Hydration ermöglichen, ihre Magie zu entfalten.
Wie es funktioniert: PrioritÀtbasiertes Laden in Aktion
Die wahre Brillanz der Selective Hydration liegt darin, wie sie die Benutzerinteraktion nutzt, um die Reihenfolge der Operationen zu bestimmen. React folgt nicht mehr einem starren, von oben nach unten gerichteten Hydrationsskript; es reagiert dynamisch auf den Benutzer.
Der Benutzer hat PrioritÀt
Hier ist das Kernprinzip: React priorisiert die Hydration der Komponenten, mit denen ein Benutzer interagiert.
WÀhrend React die Seite hydriert, hÀngt es Event-Listener auf der Wurzelebene an. Wenn ein Benutzer auf einen Button innerhalb einer Komponente klickt, die noch nicht hydriert wurde, tut React etwas unglaublich Kluges:
- Ereigniserfassung: React fÀngt das Klick-Ereignis an der Wurzel ab.
- Priorisierung: Es identifiziert, auf welche Komponente der Benutzer geklickt hat. Dann erhöht es die PrioritĂ€t der Hydration dieser spezifischen Komponente und ihrer ĂŒbergeordneten Komponenten. Jede laufende Hydrationsarbeit mit niedriger PrioritĂ€t wird angehalten.
- Hydrieren und Wiedergeben: React hydriert dringend die Zielkomponente. Sobald die Hydration abgeschlossen ist und der `onClick`-Handler angehÀngt ist, gibt React das erfasste Klick-Ereignis wieder.
Aus der Sicht des Benutzers funktioniert die Interaktion einfach, als ob die Komponente von Anfang an interaktiv gewesen wĂ€re. Sie sind sich völlig unbewusst, dass hinter den Kulissen ein ausgeklĂŒgelter Priorisierungstanz stattfand, um dies sofort zu ermöglichen.
Ein Schritt-fĂŒr-Schritt-Szenario
Gehen wir unser E-Commerce-Seitenbeispiel durch, um dies in Aktion zu sehen. Die Seite hat ein Haupt-Produktraster, eine Seitenleiste mit komplexen Filtern und ein schweres Drittanbieter-Chat-Widget am unteren Rand.
- Server-Streaming: Der Server sendet die anfĂ€ngliche HTML-HĂŒlle, einschlieĂlich des Produktrasters. Die Seitenleiste und das Chat-Widget sind in `<Suspense>` eingeschlossen und ihre Fallback-UIs (Skelette/Ladeanzeigen) werden gesendet.
- Initiales Rendern: Der Browser rendert das Produktraster. Der Benutzer kann die Produkte fast sofort sehen. Die TTI ist noch hoch, da noch kein JavaScript angehÀngt ist.
- Laden des Codes: JavaScript-Bundles beginnen mit dem Herunterladen. Nehmen wir an, der Code fĂŒr die Seitenleiste und das Chat-Widget befindet sich in separaten, code-gesplitteten Chunks.
- Benutzerinteraktion: Bevor irgendetwas vollstĂ€ndig hydriert ist, sieht der Benutzer ein Produkt, das ihm gefĂ€llt, und klickt auf den âIn den Warenkorbâ-Button im Produktraster.
- Priorisierungs-Magie: React fĂ€ngt den Klick ab. Es erkennt, dass der Klick innerhalb der `ProductGrid`-Komponente stattgefunden hat. Es bricht sofort die Hydration anderer Teile der Seite ab oder pausiert sie (die es möglicherweise gerade erst begonnen hat) und konzentriert sich ausschlieĂlich auf die Hydration des `ProductGrid`.
- Schnelle InteraktivitÀt: Die `ProductGrid`-Komponente hydriert sehr schnell, da sich ihr Code wahrscheinlich im Haupt-Bundle befindet. Der `onClick`-Handler wird angehÀngt und das erfasste Klick-Ereignis wird wiedergegeben. Der Artikel wird in den Warenkorb gelegt. Der Benutzer erhÀlt sofortiges Feedback.
- Wiederaufnahme der Hydration: Nachdem die hochpriore Interaktion behandelt wurde, setzt React seine Arbeit fort. Es fĂ€hrt mit der Hydration der Seitenleiste fort. SchlieĂlich, wenn der Code fĂŒr das Chat-Widget ankommt, hydriert es diese Komponente als letztes.
Das Ergebnis? Die TTI fĂŒr den kritischsten Teil der Seite war nahezu augenblicklich, angetrieben von der Absicht des Benutzers selbst. Die Gesamt-TTI der Seite ist keine einzelne, beĂ€ngstigende Zahl mehr, sondern ein progressiver und benutzerzentrierter Prozess.
Die greifbaren Vorteile fĂŒr ein globales Publikum
Die Auswirkungen der Selective Hydration sind tiefgreifend, insbesondere fĂŒr Anwendungen, die ein vielfĂ€ltiges, globales Publikum mit unterschiedlichen Netzwerkbedingungen und GerĂ€tefĂ€higkeiten bedienen.
Drastisch verbesserte wahrgenommene Performance
Der bedeutendste Vorteil ist die massive Verbesserung der vom Benutzer wahrgenommenen Leistung. Indem die Teile der Seite, mit denen der Benutzer interagiert, zuerst verfĂŒgbar gemacht werden, fĂŒhlt sich die Anwendung schneller an. Dies ist entscheidend fĂŒr die Benutzerbindung. FĂŒr einen Benutzer in einem Entwicklungsland mit einem langsamen 3G-Netzwerk ist der Unterschied zwischen 15 Sekunden Warten, bis die gesamte Seite interaktiv wird, und der Möglichkeit, nach 3 Sekunden mit dem Hauptinhalt zu interagieren, enorm.
Bessere Core Web Vitals
Selective Hydration wirkt sich direkt auf Googles Core Web Vitals aus:
- Interaction to Next Paint (INP): Diese neue Metrik misst die ReaktionsfĂ€higkeit. Durch die Priorisierung der Hydration basierend auf Benutzereingaben stellt Selective Hydration sicher, dass Interaktionen schnell behandelt werden, was zu einem viel niedrigeren INP fĂŒhrt.
- Time to Interactive (TTI): WĂ€hrend die TTI fĂŒr die gesamte Seite möglicherweise noch Zeit in Anspruch nimmt, wird die TTI fĂŒr kritische Benutzerpfade drastisch reduziert.
- First Input Delay (FID): Ăhnlich wie INP misst FID die Verzögerung, bevor die erste Interaktion verarbeitet wird. Selective Hydration minimiert diese Verzögerung.
Entkopplung von Inhalten von schweren Komponenten
Moderne Web-Apps sind oft mit schweren Drittanbieter-Skripten fĂŒr Analysen, A/B-Tests, Kundensupport-Chats oder Werbung beladen. In der Vergangenheit konnten diese Skripte die gesamte Anwendung daran hindern, interaktiv zu werden. Mit Selective Hydration und `<Suspense>` können diese nicht-kritischen Komponenten vollstĂ€ndig isoliert werden. Der Hauptinhalt der Anwendung kann laden und interaktiv werden, wĂ€hrend diese schweren Skripte im Hintergrund laden und hydrieren, ohne die Kernbenutzererfahrung zu beeintrĂ€chtigen.
WiderstandsfÀhigere Anwendungen
Da die Hydration in Teilen erfolgen kann, wird ein Fehler in einer nicht wesentlichen Komponente (wie einem Social-Media-Widget) nicht unbedingt die gesamte Seite zum Absturz bringen. React kann den Fehler potenziell innerhalb dieser `<Suspense>`-Grenze isolieren, wÀhrend der Rest der Anwendung interaktiv bleibt.
Praktische Umsetzung und Best Practices
Die EinfĂŒhrung von Selective Hydration hat mehr mit der korrekten Strukturierung Ihrer Anwendung zu tun als mit dem Schreiben von komplexem neuem Code. Moderne Frameworks wie Next.js (mit seinem App Router) und Remix ĂŒbernehmen einen GroĂteil der Server-Einrichtung fĂŒr Sie, aber das VerstĂ€ndnis der Kernprinzipien ist entscheidend.
EinfĂŒhrung der `hydrateRoot` API
Auf dem Client ist der Einstiegspunkt fĂŒr dieses neue Verhalten die `hydrateRoot` API. Sie wechseln vom alten `ReactDOM.hydrate` zu `ReactDOM.hydrateRoot`.
// Zuvor (Legacy)
import { hydrate } from 'react-dom';
const container = document.getElementById('root');
hydrate(<App />, container);
// Danach (React 18+)
import { hydrateRoot } from 'react-dom/client';
const container = document.getElementById('root');
const root = hydrateRoot(container, <App />);
Diese einfache Ănderung aktiviert in Ihrer Anwendung die neuen Concurrent-Rendering-Funktionen, einschlieĂlich der Selective Hydration.
Strategischer Einsatz von `<Suspense>`
Die Kraft der Selective Hydration wird dadurch freigesetzt, wie Sie Ihre `<Suspense>`-Grenzen platzieren. UmschlieĂen Sie nicht jede winzige Komponente; denken Sie in logischen UI-Einheiten oder âInselnâ, die unabhĂ€ngig voneinander laden können, ohne den Benutzerfluss zu stören.
Gute Kandidaten fĂŒr `<Suspense>`-Grenzen sind:
- Seitenleisten und Asides: Enthalten oft sekundĂ€re Informationen oder Navigation, die fĂŒr die anfĂ€ngliche Interaktion nicht entscheidend sind.
- Kommentarbereiche: Laden typischerweise langsam und befinden sich am unteren Rand der Seite.
- Interaktive Widgets: Fotogalerien, komplexe Datenvisualisierungen oder eingebettete Karten.
- Drittanbieter-Skripte: Chatbots, Analyse- und Werbekomponenten sind perfekte Kandidaten.
- Inhalte unterhalb der Falz (Below the Fold): Alles, was der Benutzer nicht sofort beim Laden der Seite sieht.
Kombination mit `React.lazy` fĂŒr Code-Splitting
Selective Hydration ist noch leistungsfĂ€higer, wenn sie mit Code-Splitting ĂŒber `React.lazy` kombiniert wird. Dies stellt sicher, dass das JavaScript fĂŒr Ihre Komponenten mit niedriger PrioritĂ€t erst dann heruntergeladen wird, wenn es benötigt wird, was die anfĂ€ngliche Bundle-GröĂe weiter reduziert.
import React, { Suspense, lazy } from 'react';
const CommentsSection = lazy(() => import('./CommentsSection'));
const ChatWidget = lazy(() => import('./ChatWidget'));
function App() {
return (
<div>
<ArticleContent />
<Suspense fallback={<CommentsSkeleton />}>
<CommentsSection />
</Suspense>
<Suspense fallback={null}> <!-- Kein visueller Loader fĂŒr ein verstecktes Widget erforderlich -->
<ChatWidget />
</Suspense>
</div>
);
}
In dieser Konfiguration befindet sich der JavaScript-Code fĂŒr `CommentsSection` und `ChatWidget` in separaten Dateien. Der Browser wird sie nur abrufen, wenn React entscheidet, sie zu rendern, und sie werden unabhĂ€ngig voneinander hydrieren, ohne den Haupt-`ArticleContent` zu blockieren.
Serverseitiges Setup mit `renderToPipeableStream`
FĂŒr diejenigen, die eine benutzerdefinierte SSR-Lösung erstellen, ist die serverseitige API `renderToPipeableStream` zu verwenden. Diese API ist speziell fĂŒr das Streaming konzipiert und integriert sich nahtlos mit `<Suspense>`. Sie gibt Ihnen eine feingranulare Kontrolle darĂŒber, wann das HTML gesendet und wie mit Fehlern umgegangen werden soll. FĂŒr die meisten Entwickler ist jedoch ein Meta-Framework wie Next.js der empfohlene Weg, da es diese KomplexitĂ€t abstrahiert.
Die Zukunft: React Server Components
Selective Hydration ist ein monumentaler Schritt nach vorne, aber es ist Teil einer noch gröĂeren Geschichte. Die nĂ€chste Evolution sind die React Server Components (RSCs). RSCs sind Komponenten, die ausschlieĂlich auf dem Server ausgefĂŒhrt werden und ihr JavaScript niemals an den Client senden. Das bedeutet, dass sie ĂŒberhaupt nicht hydriert werden mĂŒssen, was das client-seitige JavaScript-Bundle noch weiter reduziert.
Selective Hydration und RSCs arbeiten perfekt zusammen. Die Teile Ihrer App, die rein zur Anzeige von Daten dienen, können RSCs sein (kein client-seitiges JS), wÀhrend die interaktiven Teile Client-Komponenten sein können, die von der Selective Hydration profitieren. Diese Kombination stellt die Zukunft des Baus hochperformanter, interaktiver Anwendungen mit React dar.
Fazit: Intelligenter hydrieren, nicht hÀrter
Reacts Selective Hydration ist mehr als nur eine Leistungsoptimierung; es ist ein grundlegender Wandel hin zu einer benutzerzentrierteren Architektur. Indem es sich von den âAlles-oder-Nichtsâ-BeschrĂ€nkungen der Vergangenheit befreit, befĂ€higt React 18 Entwickler, Anwendungen zu erstellen, die nicht nur schnell laden, sondern auch schnell interagieren, selbst unter schwierigen Netzwerkbedingungen.
Die wichtigsten Erkenntnisse sind klar:
- Es löst den Engpass: Selective Hydration adressiert direkt das TTI-Problem des traditionellen SSR.
- Benutzerinteraktion ist König: Es priorisiert intelligent die Hydration basierend auf dem, was der Benutzer tut, wodurch sich Apps sofort reaktionsschnell anfĂŒhlen.
- Ermöglicht durch Concurrency: Es wird durch die Concurrent-Engine von React 18 ermöglicht, die mit Streaming SSR und `<Suspense>` zusammenarbeitet.
- Ein globaler Vorteil: Es bietet eine deutlich bessere und gerechtere Erfahrung fĂŒr Benutzer auf der ganzen Welt, auf jedem GerĂ€t.
Als Entwickler, die fĂŒr ein globales Publikum bauen, ist es unser Ziel, Erlebnisse zu schaffen, die fĂŒr jeden zugĂ€nglich, widerstandsfĂ€hig und erfreulich sind. Indem wir die Kraft der Selective Hydration nutzen, können wir aufhören, unsere Benutzer warten zu lassen, und anfangen, dieses Versprechen einzulösen, eine priorisierte Komponente nach der anderen.