How-To

Javascript mit Struktur: Patterns für performante Anwendungen

Seite 2 / 3

Leider gibt es bisher für Javascript kein einheitliches Modulsystem. Zwei Standards haben sich zwar herausgebildet: Die Dojo-Foundation führte im Rahmen von require.js zum einen das Modulsystem AMD ein. Zum anderen gibt es die Modulsystem-Syntax CommonJS von Node.js. Auch standardisierte das ECMAScript 2015 neben den Klassen auch das Modulsystem. Doch leider griff das Standardisierungsgremium keinen dieser etablierten Standards auf, sondern definierte kurzerhand einen dritten. Dieser arbeitet mit den Schlüsselwörtern „import“ und „export“. Wie ein solches Modul in der Praxis aussieht, zeigt das folgende Listing.


// account.js
export default class Account {
constructor(username, password) {
this.username = username;
this.password = password;
}

authenticate() {
...
}

changePassword(newPass) {
...
}
}

// index.js
import Account from './account';
var acc = new Account('John', 'Password1');
acc.authenticate()
.then(() => acc.changePassword('topSecret!'));

Die separate Komponente „Loader“ lädt die Dateien und löst Abhängigkeiten auf. Der Standard ist mittlerweile zwar fixiert, doch kein Browser unterstützt ihn derzeit schon nativ. Mit Bibliotheken wie SystemJS kommen Programmierer trotzdem in den Genuss dieser Funktion. Daneben unterstützen diese Bibliotheken beim Produktivbetrieb: Statt den Benutzern hunderte einzelner Dateien auszuliefern, stellen Entwickler ihre Applikation damit in wenigen großen und optimierten Dateien bereit.

Asynchrone Programmierung

Wer seinen Nutzern einen Mehrwert bieten will, sollte die einzelnen Objekte und Module einer klassenbasierten, modularisierten Applikation untereinander kommunizieren lassen. Warum? Nun, im Normalfall läuft die Kommunikation über Methodenaufrufe. Doch spätestens bei asynchronen Operationen stößt dies an Grenzen. Denn bei Asynchronität steht der Rückgabewert einer Methode zum Zeitpunkt seiner Ausführung noch gar nicht fest.

Das bedeutet, das Programm läuft weiter ab – das Ergebnis der Operation, zum Beispiel ein Server-Call, liegt aber erst zu einem späteren Zeitpunkt vor. Damit die allgegenwärtige Asynchronität in Javascript kein Problem wird und Entwickler bei vielfach ineinandergeschachtelten Callback-Funktionen nicht den Überblick verlieren, greifen sie am besten auf die Funktion „Promises“ zurück.

Damit können Programmierer ein Objekt erstellen, das für eine asynchrone Operation steht. Sie arbeiten im Verlauf der Applikation mit dem Objekt und können beliebig viele Callback-Funktionen an den Erfolg oder Misserfolg der Operation knüpfen. Promises lassen sich außerdem verketten, sodass sie lineare Abläufe asynchroner Operationen bilden, bei denen jedes Kettenglied auf die Ausführung des vorherigen wartet. Reicht das nicht für die Flusssteuerung in einer Applikation, kann man Promises parallel laufen lassen und mit der weiteren Programmausführung erst dann fortfahren, wenn auch die letzte asynchrone Operation erfolgreich beendet ist.

Events

Ganz ohne Callback-Funktionen geht es in Javascript leider nicht und der Funktionsumfang von Promises hat Grenzen: Das Feature eignet sich hervorragend für asynchrone Operationen, bei denen es entweder Erfolg und Fehlschlag gibt. Für Abläufe mit mehreren Zuständen empfiehlt sich aber nicht Promises, sondern ein Architekturansatz, der so alt ist wie Javascript selbst: Die „Events“.

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Ein Kommentar
Thomas
Thomas

Vielen Dank für den (eher) generellen Überblick. Mehr von solchen Artikeln!