Was ist der MEAN-Stack? JavaScript-Webanwendungen

Der definierte MEAN-Stack

Der MEAN-Stack ist ein Software-Stack, dh eine Reihe von Technologieebenen, aus denen eine moderne Anwendung besteht, die vollständig in JavaScript erstellt wurden. MEAN repräsentiert die Einführung von JavaScript als "Full-Stack-Entwicklungssprache", in der alles in einer Anwendung vom Front-End bis zum Back-End ausgeführt wird. Jede der Initialen in MEAN steht für eine Komponente im Stapel:

  • MongoDB: Ein Datenbankserver, der mit JSON (JavaScript Object Notation) abgefragt wird und Datenstrukturen in einem binären JSON-Format speichert
  • Express: Ein serverseitiges JavaScript-Framework
  • Angular: Ein clientseitiges JavaScript-Framework
  • Node.js: Eine JavaScript-Laufzeit

Ein großer Teil der Attraktivität von MEAN ist die Konsistenz, die sich aus der Tatsache ergibt, dass es sich durch und durch um JavaScript handelt. Für Entwickler ist das Leben einfacher, da jede Komponente der Anwendung - von den Objekten in der Datenbank bis zum clientseitigen Code - in derselben Sprache geschrieben ist. 

Diese Konsistenz steht im Gegensatz zum Durcheinander von LAMP, dem langjährigen Grundnahrungsmittel der Entwickler von Webanwendungen. Wie MEAN ist LAMP ein Akronym für die im Stack verwendeten Komponenten - Linux, Apache HTTP Server, MySQL und entweder PHP, Perl oder Python. Jedes Stück des Stapels hat wenig mit jedem anderen Stück gemeinsam. 

Dies bedeutet nicht, dass der LAMP-Stapel minderwertig ist. Es ist immer noch weit verbreitet und jedes Element im Stapel profitiert immer noch von einer aktiven Entwicklungsgemeinschaft. Die konzeptionelle Konsistenz, die MEAN bietet, ist jedoch ein Segen. Wenn Sie auf allen Ebenen des Stapels dieselbe Sprache und viele dieselben Sprachkonzepte verwenden, wird es für Entwickler einfacher, den gesamten Stapel auf einmal zu beherrschen.

Die meisten MEAN-Stacks enthalten alle vier Komponenten - die Datenbank, das Front-End, das Back-End und die Ausführungs-Engine. Dies bedeutet nicht, dass der Stapel nur aus diesen Elementen besteht, sondern dass sie den Kern bilden.

MongoDB

Wie andere NoSQL-Datenbanksysteme verwendet MongoDB ein schemaloses Design. Daten werden als JSON-formatierte Dokumente gespeichert und abgerufen, die eine beliebige Anzahl verschachtelter Felder enthalten können. Diese Flexibilität macht MongoDB gut geeignet für eine schnelle Anwendungsentwicklung bei sich schnell ändernden Anforderungen.

Die Verwendung von MongoDB ist mit einer Reihe von Einschränkungen verbunden. Zum einen hat MongoDB den Ruf, standardmäßig unsicher zu sein. Wenn Sie es in einer Produktionsumgebung bereitstellen, müssen Sie Schritte unternehmen, um es zu sichern. Und für Entwickler, die aus relationalen Datenbanken oder sogar anderen NoSQL-Systemen stammen, müssen Sie einige Zeit damit verbringen, MongoDB und seine Funktionsweise kennenzulernen. Martin Heller hat sich in MongoDB 4 in seiner Rezension eingehend mit MongoDB-Interna, Abfragen und Nachteilen befasst.

Wie bei jeder anderen Datenbanklösung benötigen Sie Middleware für die Kommunikation zwischen MongoDB und den JavaScript-Komponenten. Eine häufige Wahl für den MEAN-Stack ist Mongoose. Mongoose bietet nicht nur Konnektivität, sondern auch Objektmodellierung, app-seitige Validierung und eine Reihe anderer Funktionen, die Sie nicht für jedes neue Projekt neu erfinden möchten.

Express.js 

Express ist wohl das am weitesten verbreitete Webanwendungsframework für Node.js. Express bietet nur einen kleinen Satz wesentlicher Funktionen - es handelt sich im Wesentlichen um einen minimalen, programmierbaren Webserver -, kann jedoch über Plug-Ins erweitert werden. Dieses schnörkellose Design sorgt dafür, dass Express leicht und leistungsfähig bleibt.

Nichts besagt, dass eine MEAN-App direkt über Express an Benutzer geliefert werden muss, obwohl dies sicherlich ein häufiges Szenario ist. Eine alternative Architektur besteht darin, einen anderen Webserver wie Nginx oder Apache vor Express als Reverse-Proxy bereitzustellen. Auf diese Weise können Funktionen wie der Lastausgleich auf eine separate Ressource verlagert werden.

Da Express absichtlich minimal ist, ist damit nicht viel konzeptioneller Aufwand verbunden. Die Tutorials auf Expressjs.com bieten Ihnen einen schnellen Überblick über die Grundlagen bis hin zum Verbinden von Datenbanken und darüber hinaus.

Winkelig

Angular (früher AngularJS) wird verwendet, um das Frontend für eine MEAN-Anwendung zu erstellen. Angular verwendet das JavaScript des Browsers, um vom Server bereitgestellte Daten in HTML-Vorlagen zu formatieren, sodass ein Großteil der Arbeit beim Rendern einer Webseite auf den Client verlagert werden kann. Viele einseitige Webanwendungen werden mit Angular im Frontend erstellt.

Eine wichtige Einschränkung: Entwickler arbeiten mit Angular, indem sie in TypeScript schreiben, einer JavaScript-ähnlichen typisierten Sprache, die zu JavaScript kompiliert wird. Für einige Leute ist dies eine Verletzung eines der Hauptkonzepte des MEAN-Stacks - dass JavaScript überall und ausschließlich verwendet wird. TypeScript ist jedoch ein enger Verwandter von JavaScript, sodass der Übergang zwischen beiden nicht so störend ist wie bei anderen Sprachen.

Für einen tiefen Einblick in Angular hat Martin Heller Sie abgedeckt. In seinem Angular-Tutorial führt er Sie durch die Erstellung einer modernen Angular-Web-App.

Node.js 

Last but not least gibt es Node.js - die JavaScript-Laufzeit, die die Serverseite der MEAN-Webanwendung mit Strom versorgt. Der Knoten basiert auf der V8-JavaScript-Engine von Google, der gleichen JavaScript-Engine, die auch im Chrome-Webbrowser ausgeführt wird. Node ist plattformübergreifend, läuft sowohl auf Servern als auch auf Clients und bietet gegenüber herkömmlichen Webservern wie Apache bestimmte Leistungsvorteile. 

Node.js verfolgt einen anderen Ansatz für die Bearbeitung von Webanfragen als herkömmliche Webserver. Beim herkömmlichen Ansatz erzeugt der Server einen neuen Ausführungsthread oder gibt sogar einen neuen Prozess heraus, um die Anforderung zu verarbeiten. Das Laichen von Threads ist effizienter als das Gabeln von Prozessen, aber beide sind mit viel Aufwand verbunden. Eine große Anzahl von Threads kann dazu führen, dass ein stark ausgelastetes System wertvolle Zyklen für die Thread-Planung und den Kontextwechsel benötigt, wodurch die Latenz erhöht und die Skalierbarkeit und der Durchsatz eingeschränkt werden. 

Node.js ist weitaus effizienter. Der Knoten führt eine Single-Threaded-Ereignisschleife aus, die beim System registriert ist, um Verbindungen zu verarbeiten, und jede neue Verbindung bewirkt, dass eine JavaScript-Rückruffunktion ausgelöst wird. Die Rückruffunktion kann Anforderungen mit nicht blockierenden E / A-Aufrufen verarbeiten und bei Bedarf Threads aus einem Pool erzeugen, um blockierende oder CPU-intensive Vorgänge auszuführen und den Lastausgleich zwischen CPU-Kernen zu ermöglichen.

Node.js benötigt weniger Speicher, um mehr Verbindungen zu verarbeiten als die meisten wettbewerbsfähigen Architekturen, die mit Threads skaliert werden können - einschließlich Apache HTTP Server, ASP.NET, Ruby on Rails und Java-Anwendungsservern. Daher ist Node eine äußerst beliebte Wahl für die Erstellung von Webservern, REST-APIs und Echtzeitanwendungen wie Chat-Apps und Spielen. Wenn es eine Komponente gibt, die den MEAN-Stapel definiert, ist dies Node.js. 

Eine Einführung in Node.js finden Sie in Martin Hellers Erklärung. Informationen zur Entwicklung mit Node finden Sie in seinem Node.js-Tutorial. 

Vorteile und Nutzen des MEAN-Stacks 

Diese vier Komponenten, die zusammenarbeiten, sind nicht die Lösung für jedes Problem, aber sie haben definitiv eine Nische in der zeitgenössischen Entwicklung gefunden. IBM unterteilt die Bereiche, in denen der MEAN-Stapel zur Rechnung passt. Da der MEAN-Stack skalierbar ist und eine große Anzahl von Benutzern gleichzeitig verarbeiten kann, ist er eine besonders gute Wahl für Cloud-native Apps. Das Angular-Frontend ist auch eine gute Wahl für Anwendungen mit nur einer Seite. Beispiele beinhalten:

  • Spesenverfolgungs-Apps
  • Websites zur Nachrichtenaggregation
  • Mapping- und Standort-Apps

MEAN vs. MERN

Das Akronym "MERN" wird manchmal verwendet, um MEAN-Stapel zu beschreiben, die React.js anstelle von Angular verwenden. React ist ein Framework, keine vollwertige Bibliothek wie Angular, und es gibt Vor- und Nachteile, React in einen JavaScript-basierten Stapel zu tauschen. Kurz gesagt, React ist einfacher zu erlernen und die meisten Entwickler können React-Code schneller schreiben und testen als eine vollwertige Angular-App. React erzeugt auch bessere mobile Frontends. Auf der anderen Seite ist Angular Code stabiler, sauberer und performanter. Im Allgemeinen ist Angular die Wahl für die Entwicklung der Enterprise-Klasse.

Allein die Tatsache, dass Ihnen diese Auswahl zur Verfügung steht, zeigt, dass MEAN für Entwickler keine eingeschränkte Zwangsjacke ist. Sie können nicht nur verschiedene Komponenten gegen eine der vier kanonischen Schichten austauschen. Sie können auch ergänzende Komponenten hinzufügen. Beispielsweise könnten Caching-Systeme wie Redis oder Memcached in Express verwendet werden, um die Antworten auf Anforderungen zu beschleunigen.

MEAN Stack-Entwickler

Die Fähigkeit, ein MEAN-Stack-Entwickler zu sein, bedeutet im Grunde, ein Full-Stack-Entwickler zu werden, wobei der Schwerpunkt auf den speziellen JavaScript-Tools liegt, die wir hier besprochen haben. Aufgrund der Beliebtheit des MEAN-Stacks richten sich viele Stellenanzeigen jedoch an Full-Stack-Entwickler mit MEAN-spezifischen Fähigkeiten. Guru99 bricht die Voraussetzungen auf, um einen dieser Jobs zu ergattern. Ein MEAN-Stack-Entwickler sollte nicht nur mit den grundlegenden MEAN-Stack-Komponenten vertraut sein, sondern auch Folgendes verstehen:

  • Front-End- und Back-End-Prozesse
  • HTML und CSS
  • Programmiervorlagen und Richtlinien für das Architekturdesign
  • Webentwicklung, kontinuierliche Integration und Cloud-Technologien
  • Datenbankarchitektur
  • Der Software Development Lifecycle (SDLC) und die Entwicklung in einer agilen Umgebung

Was ist das Gehalt eines MEAN-Stack-Entwicklers? Während es immer ein Spektrum gibt, das auf Erfahrung und Arbeitgeber basiert, ist es definitiv ein lukratives Feld. Laut Neuvoo.com liegt der Medianlohn, den ein MEAN-Stack-Entwickler erwarten kann, im Dezember 2019 bei 125.000 USD pro Jahr. Indeed.com bringt MEAN-Stack-Entwickler generell mit Full-Stack-Entwicklern zusammen und legt das typische Jahresgehalt auf rund 112.000 US-Dollar fest.

MEAN Stack-Tutorials

Sind Sie mit den technischen Grundlagen vertraut und bereit, in den MEAN-Stack einzutauchen und ihn zu lernen? Es gibt eine Reihe von kostenlosen Tutorials, mit denen Sie loslegen können. Die Angular Templates-Website enthält ein besonders ausführliches Tutorial, das Sie durch den Prozess des Erstellens einer einfachen Website mithilfe des MEAN-Stacks führt. TutorialsPoint bietet eine gute Anleitung zum Erstellen einer einseitigen Webanwendung mit dem MEAN-Stack. Viel Spaß beim schmutzigen Hände und viel Glück!