In dieser Projektarbeit werden folgende Fragen beantworten: "Inwiefern ist der Einsatz von WebAssembly im Hinblick auf Leistungsverbesserungen und Implementierungsaufwand im Vergleich zu herkömmlichen Webentwicklungstechnologien aktuell empfehlenswert?" und "Welche Möglichkeiten bietet WebAssembly für Webanwendungen und welche technischen Herausforderungen ergeben sich bei der prototypischen Implementierung eines WebAssembly-basierten Systems im Vergleich zu herkömmlichen Technologien?".
Zunächst wird in das Thema WebAssembly eingeführt, indem eine Begriffserklärung stattfindet, sowie die Entstehungsgeschichte WebAssemblys und dessen Vorgängertechnologien erläutert werden. Weitergehend wird auf die Vorteile WebAssemblys eingegangen: Sicherheit, Schnelligkeit, Portabilität, Kompatibilität mit weiteren Webtechnologien und Lesbarkeit.
WebAssembly bietet durch das binäre Bytecode-Format neue Möglichkeiten. Web-Anwendungen können nun in höheren Programmiersprachen, wie beispielsweise C, C++, Rust oder Kotlin geschrieben werden, in das Bytecode-Format kompiliert und anschließend in nahezu nativer Geschwindigkeit ausgeführt werden. Da gängige Webtechnologien bei komplexen und rechenintensiven Anwendungen an ihre Grenzen bezüglich der Performance und Sicherheit stoßen, wurde der WebAssembly Low Level Bytecode eingeführt.
Die erhöhte Sicherheit wird durch eine Sandbox-Umgebung und Permissions, sowie dem Unterbinden eines Zugriffes auf das DOM gewährleistet.
Durch die Einführung des WebAssembly System Interface (WASI) können WebAssembly Module nicht nur im Browser, sondern nun auch auf dem Server ausgeführt werden.
WebAssembly ist kompatibel mit JavaScript und interagiert mit diesem problemlos.
Durch das WebAssembly Text Format kann das WebAssembly Bytecode Format nun auch vom Menschen gelesen werden.
Weitergehend wird auch auf den aktuellen Stand WebAssembly eingegangen. Browseranbieter arbeiten laufend daran WebAssembly in die Funktionalitäten zu integrieren und weiterzuentwickeln. Debugging Systeme sind jedoch noch in der Entwicklung.
Nachdem auch die Funktionsweise von WebAssembly erläutert wird, wird eine Einführung in die prototypische Webanwendung gegeben.
Die Webanwendung führt einen Performancevergleich zwischen WebAssembly und JavaScript durch, indem komplexe und rechenintensive Algorithmen in beiden Varianten durchgeführt und deren Schnelligkeit verglichen wird. Die Ergebnisse werden in einem Liniendiagramm visuell dargestellt, sodass Benutzer einen optimalen Überblick erhalten können.
In zwei der drei Berechnungen (Fibonacci und Bubble Sort) schneidet WebAssembly mit deutlich höherer Schnelligkeit ab.
Abschließend wird ein Performancevergleich der gängigsten Browser, Chrome, Firefox und Safari durchgeführt. Die Ergebnisse werden in der Arbeit in einzelnen Tabellen visualisiert.
Es ist anzumerken, dass beim Implementieren der einzelnen WebAssembly Module einige Probleme auftraten, die mit dem Importieren von bestimmten Bibliotheken zu tun hatten. Somit konnte die eigentlich geplante Pi-Funktion nicht umgesetzt werden. Zwar weist WebAssembly in zwei von drei Fällen einen deutlichen Vorteil bezüglich der Performance auf, jedoch sind der Implementierungsaufwand und die bisher wenig vorhandenen Lösungen für individuelle Probleme nicht außer Acht zu lassen.
Projektteam:
Eva-Marie Hermann, Andreas Higel, Christopher Reiter
Projektbetreuung:
Prof. Tom Rüdebusch