App-Entwicklung mit JavaScript, Teil 4: Eine universelle Sprache

ÜberKreuz  –  3 Kommentare
Anzeige

Spätestens mit der Veröffentlichung von Node.js 2009 hat JavaScript den Browser verlassen. Da sich ein- und dieselbe Sprache nun sowohl auf dem Client als auch dem Server ausführen lässt, ergeben sich spannende Möglichkeiten. Nur ob man JavaScript deswegen nun als universell oder isomorph bezeichnen soll, daran scheiden sich die Geister.

In seinem Unternehmensblog stellt Charlie Robbins, CEO von Nodejitsu, 2011 fest, dass JavaScript eine isomorphe Sprache sei: Im Gegensatz zu Java, Ruby oder Python könne jede Zeile JavaScript (mit bestimmten Ausnahmen) sowohl auf dem Client als auch auf dem Server ausgeführt werden. Spike Brehm von Airbnb greift den Begriff 2013 auf und postuliert unter dem Namen Isomorphic JavaScript die Zukunft der Web-Apps. Er hebt dabei die Eigenschaft hervor, dass die Sichten einer JavaScript-Anwendung unter Einbezug ihrer Logik und ihres Zustandes sowohl auf dem Client als auch auf dem Server gerendert werden können.

Anzeige

App-Entwicklung mit JavaScript

2015 schlägt Michael Jackson, Mitgründer von reacttraining.com, den Begriff Universal JavaScript vor. Dieser bezeichne die Fähigkeit, dass sich ein und derselbe JavaScript-Quellcode in einer komplett unterschiedlichen Umgebung ausführen lasse: Nicht nur im Browser oder auf dem Server, sondern auch auf mobilen und Embedded Devices. Axel Rauschmeyer unterbreitet im selben Jahr den Kompromiss, den Begriff isomorphic für die Technik des Zusammensetzens von Sichten auf dem Server und dem Client zu verwenden und den Begriff universal für JavaScript, das in allen oder den meisten JavaScript-Umgebungen läuft. An diesen Kompromissvorschlag möchte sich der restliche Artikel halten.

JavaScript lässt sich sowohl auf dem Client als auch auf dem Server einsetzen. Wenn Entwickler universelles JavaScript schreiben,dann nutzen sie keinen Dialekt oder eine ganz andere Sprache. Stattdessen müssen sie darauf achten, dass der entstehende Quellcode auf verschiedenen Ausführungsumgebungen zum Einsatz kommen kann. So gibt es auf dem Server unter Node.js beispielsweise das aus dem Browser bekannte globale window-Objekt nicht. Dort heißt es global. Zudem gibt es auf dem Server kein Document Object Model (DOM), sodass dessen Schnittstellen dort ebenfalls nicht zur Verfügung stehen.

Dank universellem JavaScript wird es beispielsweise möglich, Datenmodelle unter Einbezug desselben Quellcodes auf dem Server und dem Client erzeugen oder validieren zu können, ohne dass Code auf Server- oder Clientseite dupliziert werden muss. Betrachtet sei dazu ein kleines Beispiel an, das zudem die Verwendung der Generatorfunktionen aus ECMAScript 2015 zeigt.

class Person {
constructor(name, age, country) {
this.name = name;
this.age = age;
this.country = country;
}

*getValidationErrors() {
if (!this.name) {
yield 'Please tell me your name.';
}

if (this.age < 30) {
yield 'You must be 30 years or older.';
}

if (this.country !== 'USA') {
yield 'We do not ship outside of the U.S.';
}
}
}

const person = new Person('Tim', 18, 'GER');
for (let error of person.getValidationErrors()) {
console.error(error);
}

Hier ist Validierungscode zu sehen, der sich sowohl im Browser als auch auf dem Client ausführen lässt. Die Abbildung zeigt das Ergebnis der Ausführung im Webbrowser Google Chrome und Node.js auf der Kommandozeile.

Auf dem Client kann dem Benutzer damit mitgeteilt werden, welche Angabe falsch ist. Verwendet er kein JavaScript, kann der Server unter Anwendung derselben Validierungsregeln dieselbe menschenlesbare Fehlermeldung ausgeben.

Aus der Eigenschaft von JavaScript, in unterschiedlichen Ausführungsumgebungen zu laufen, leitet sich auch die zweite Eigenschaft ab: Unter Verwendung ein- und desselben JavaScript-Quellcodes lassen sich Sichten wahlweise clientseitig oder serverseitig generieren. Frameworks wie React oder Angular machen sich das zunutze, um Entwicklern serverseitiges Rendering und somit bessere Unterstützung für Suchmaschinenbots und Social Crawlers sowie eine gefühlt schnellere Ladezeit bieten zu können. Softwareentwickler müssen wiederum nur noch eine Sprache lernen, um client- und serverseitige Dynamik gleichzeitig zu beherrschen, und das alles unter Verwendung einer gemeinsamen Codebasis.

Mit diesem Artikel möchten wir die Reihe rund um JavaScript schließen. JavaScript kann mehr, als manche Entwickler der Sprache und ihrem technologischen Umfeld zutrauen würden. Die Sprache räumt ihnen viele Freiheiten ein, mit denen sie sorgsam umgehen müssen. Der punktuelle oder vollständige Einsatz der statischen Typisierung von TypeScript kann dabei helfen. Im Gegenzug winkt eine riesige Reichweite an Plattformen rund um Desktop, Mobile, Embedded Devices, Browser und Server, die ihresgleichen sucht.

Anzeige