Patterns.dev
(patterns.dev)- Muster für Webanwendungs-Design und Performance-Optimierung als kostenlose Online-Ressource, die Lerninhalte rund um JavaScript und moderne Frameworks bereitstellt
- Vanilla JavaScript, React, Vue sind jeweils mit speziellen Designmustern sowie Rendering-, Ladevorgangs- und Performance-Verbesserungstechniken systematisch aufbereitet
- Code-Wiederverwendung, State Management, Rendering-Strategien, Bundle-Optimierung usw. werden mit praxisnahen Beispielen und einer CodeSandbox-Umgebung für Übungen unterstützt
- Design-Muster werden als Referenzwerkzeuge statt als Vorschriften vorgestellt, um wiederkehrende Problemstellungen zu lösen und Gemeinsamkeiten in Code zu erkennen
- Inklusive moderner ES2017+-Syntax und React-Hooks-basierter Implementierungen mit Fokus auf strukturelle Skalierbarkeit und Performance-Verbesserung großer Web-Apps
Überblick
- Patterns.dev ist eine kostenlose Online-Ressource zur Verbesserung der Architektur von Web-Apps und gliedert sich rund um Design-, Rendering- und Performance-Muster
- Mit Implementierungsbeispielen für Vanilla JavaScript, React, Vue.js werden Zweck und Einsatz jedes Musters erklärt
- Es gibt eine eBook- oder PDF-Download-Option sowie die Möglichkeit des Online-Lesens
JavaScript-Muster
- Grundlegendes JavaScript und Node.js stehen im Mittelpunkt einer Mustersammlung
- Singleton, Proxy, Prototype, Observer, Module, Mixin, Mediator, Flyweight, Factory und weitere klassische Designmuster
- Performance- und Ladeoptimierungs-Muster sind umfangreich dokumentiert
- Dynamic Import, Route-based Splitting, Tree Shaking, Prefetch, Preload, PRPL, Third-party-Optimierung usw.
- Einsatz von View Transitions API für Seitenübergangsanimationen, List-Virtualisierung, Code-Minimierung und weitere moderne Browser-Funktionen
React-Muster
- Strukturelle Muster und Rendering-Strategien auf Basis von React und Next.js
- Container/Presentational, HOC, Render Props, Hooks, Compound usw.
- Vergleich von Rendering-Ansätzen
- Client-side, Server-side, Static, Incremental Static Generation, Progressive Hydration, Streaming SSR
- Leitfäden zu React Server Components und Next.js Core Web Vitals-Optimierung
- Das Dokument React Stack Patterns (2025/2026) behandelt moderne Stacks wie Frameworks, Build-Tools, Routing, State Management und KI-Integration
Vue-Muster
- Vue.js-spezifische Muster mit Fokus auf Komponentenstruktur und State Management
- Components, Async Components, Composables, Container/Presentational, Data Provider, Dynamic Components
- Bereitstellung einer modernen Code-Struktur mit Composition API und <script setup>
- Enthält fortgeschrittene Muster wie Provide/Inject, Renderless Components, Render Functions
Muster-Anwendung und Philosophie
- Patterns.dev stellt Muster als Referenzwerkzeuge statt als sture Normen dar
- Es liefert gemeinsame Lösungen für wiederkehrende Probleme, erzwingt diese aber nicht für jeden Anwendungsfall
- Der Zweck von Design-Mustern besteht darin, Gemeinsamkeiten von Codeproblemen verständlich zu kommunizieren
- Es wird die Bedeutung von sprach- und framework-spezifischen Mustern betont und ein moderner Ansatz jenseits klassischer GoF-Muster angeboten
Lern- und Praxisunterstützung
- Mit CodeSandbox-Übungsbeispielen lässt sich die tatsächliche Umsetzung jedes Musters direkt ansehen
- Ein visuell animierter Lernansatz unterstützt das Verständnis der Konzepte
- Über Web-Performance-Muster werden Methoden zur Optimierung der Ladeeffizienz und zur Verbesserung der User Experience gezeigt
Kernmerkmale auf einen Blick
- ES2017+-Syntax-basierte Implementierungen für eine Optimierung auf moderne JavaScript-Umgebungen
- Auf React-Entwickler zugeschnittene Optimierung und Web-Performance-Verbesserung im Fokus
- Moderne Interpretation von Design-Mustern mit klarer Betonung auf Praxis statt Komplexität
- Praxisleitfäden für Skalierbarkeit und Performance-Steigerung großer Web-Apps
1 Kommentare
Hacker-News-Kommentare
Als ich früher in meinem alten Job .NET-Enterprise-Apps entwickelt habe, waren Design Patterns wirklich nützlich
Da mehrere Teams dieselben Patterns verwendeten, war der Code vertraut, und neue Projekte hatten eine konsistente Struktur
Jetzt arbeite ich aber an einer über 10 Jahre alten JS-App, und dort sind der Java-EE-artige Missbrauch von Gettern/Settern und komplexe Factory-Strukturen eher schädlich
Wenn man Patterns exzessiv einsetzt, ohne zu verstehen, warum man sie verwendet, führt das zu weit schlechteren Ergebnissen als einfach gut lesbarer Code (erinnert an das YAGNI-Prinzip)
Als Entwickler kommt man irgendwann ganz natürlich auf Strukturen wie Adapter, Builder, Iterator
Der eigentliche Wert von Design Patterns liegt darin, diesen entdeckten Mustern eine gemeinsame Sprache zu geben, damit man leichter miteinander kommunizieren kann
In einfachen Sprachen wie C, Go oder JavaScript lässt sich vieles deutlich einfacher lösen
Das passt nicht zur Philosophie der Sprache
Anfangs wirkt es sauber, aber mit der Zeit verteilt sich die Logik, und bei neuen Anforderungen brechen die Patterns leicht auseinander
Am Ende sehnt man sich nach einem einfachen
switch-Statement zurückDas ist wie der Perspektivunterschied zwischen jemandem, der nur kleine Apps baut, und jemandem, der Wolkenkratzer errichtet
Früher gab es die Yahoo Design Pattern Library
Sie war auf UX-Patterns fokussiert und hatte verschiedene Beispiele gut aufbereitet, wie man Nutzerverhalten steuern kann (z. B. Bewertungen abgeben)
Original-Link / Webarchiv
Ein Archiv mit UI-Komponenten aus über 90 Design-Systemen, das sich auch gut eignet, um a11y/ARIA-Richtlinien zu lernen
component.gallery
Eine gemeinsame Sprache hat die Produktivität erhöht
Das ist eine gute Sammlung von Ressourcen, ich habe sie zu meinen Lesezeichen hinzugefügt
Ich teile noch ähnliche Seiten
Ward Cunningham soll das Wiki genau zu diesem Zweck erstellt haben c2.com/ppr
Je mehr Erfahrung man sammelt, desto geringer wird die Abhängigkeit von Design Patterns
Juniors denken oft, das Lernen von Patterns sei eine Abkürzung in der Karriere, aber häufig erhöht es eher die Komplexität
Wirklich wichtig ist, das Wesen des Problems und die Datenstrukturen zu verstehen
Wenn man zum Beispiel gemeinsame Elemente zweier Arrays finden will, ist ein einfaches Pattern, das mit einer HashMap auf O(n) reduziert, viel nützlicher
So etwas hat nicht einmal einen Namen, ist in der Praxis aber ein Kernmuster, das man täglich verwendet
Letztlich zählen Prinzipien und Kontext, nicht die lehrbuchhafte Form
Wenn jemand sagt: „Ich habe ein Singleton gebaut“, versteht man sofort, was gemeint ist
Problematisch wird es erst, wenn man Werkzeuge blind glorifiziert
Das kann man auch im Query Planner von Postgres sehen
Beim Benennen von Code sollte man aber lieber beschreibend sein
Es lohnt sich, das beim Üben auf Leetcode zu lernen
Als Buch, das nicht nur technische, sondern auch organisatorische Patterns behandelt,
wird Organisational Patterns (James Coplien, Neil Harrison) empfohlen
Zusammenfassungslink
Während meiner Studienzeit habe ich zufällig einen Pattern-Kurs besucht, den Ralph Johnson persönlich unterrichtet hat,
und das war einer der nützlichsten Kurse meines Lebens
Ralph-Johnson-Wiki
Es gibt den Satz: „Design Patterns are a sign of missing language features“
Das heißt: Wäre eine Sprache ausreichend ausdrucksstark, bräuchte man Patterns vielleicht gar nicht
Verwandte Materialien: C2 Wiki, Norvig-Paper, Medium-Artikel
Diese Seite ist eine gut strukturierte Sammlung von Tutorials, aber im Gegensatz zu Christopher Alexanders „A Pattern Language“
zeigt sie nicht die hierarchische Verknüpfungsstruktur zwischen den Patterns, was schade ist
Ursprünglich bekommen Patterns ihre Bedeutung gerade durch diese Beziehungen von oben nach unten, aber in Technikbüchern fehlt dieser Kontext oft
Es wäre auch gut, wenn klarer dargestellt würde, welches Problem jedes Pattern eigentlich löst
Zum Beispiel ist „Short Passages“ mit „Flow Through Rooms“, „Building Thoroughfare“ usw. verknüpft
Genau diese Struktur ist die eigentliche Stärke einer Pattern Language
Wenn man Patterns überstrapaziert, entsteht langsamer und schwer wartbarer Code
Wenn man Probleme vorab lösen will, die es noch gar nicht gibt, erzeugt man nur Komplexität
Aus der POSD-Perspektive (Principles of Software Design) sind folgende Patterns nützlich
Dagegen sollte man bei Singleton, Mixin, Observer usw. vorsichtig sein, weil sie die Komplexität erhöhen oder globale Zustandsabhängigkeiten verursachen können
Diese Seite setzt eher auf Breite statt Tiefe und wirkt deshalb nach 2017
Wirklich wichtig ist, die Grundlagen im Umgang mit immutable data zu beherrschen
Es hilft enorm, einmal bewusst zu üben, Code nur mit Array-Methoden und ohne
for-Schleifen zu schreibenIn JS stößt man mit
Object.freezeschnell an Grenzen, und ein Ansatz wie bei ramdajs, bei dem neue Objekte zurückgegeben werden, ist realistischerDank moderner JS-Syntax sind heute nur noch einige Funktionen von ramdajs wirklich nützlich