Performance-Analyse WebAssembly

zum Projekt

Das Projekt

Immer mehr Webapplikationen erhalten Einzug in ehemals fremde Domänen. Desktop Applikationen, Webserver und 3D-Anwendungen stellen nur einige Beispiele für Anwendungen dar, die mit Javascript betrieben werden können. Bisher stellte Javascript die einzige verbreitete native Programmiersprache des Webs dar. Allerdings eignet sich die Skriptsprache eher weniger für rechenintensive Aufgaben. Daher wurde WebAssembly entwickelt, ein plattformunabhängiger Bytecode für das Web. WebAssembly soll mit nahezu nativer Performance im Browser ausgeführt werden können.

In meiner Bachelorarbeit vergleiche ich die beiden Technologien Javascript und WebAssembly. Dabei wurden die folgenden Fragestellungen formuliert: Wie wird Javascript effizient im Browser ausgeführt? Gibt es Limitierungen bei der Ausführung von Javascript? Kann WebAssembly diese Probleme lösen? Im praktischen Teil dieser Arbeit wurde die Performance von WebAssembly, JavaScript und C verglichen. Dazu werden in drei Fallstudien Benchmarks durchgeführt. Ein großer Bereich widmet sich dem Einsatz von experimentellen WASM-Threads. Ein weiterer Teil stellt die Anwendung von Filtermatritzen auf Videodaten in Echtzeit dar. Dieser rechenintensive Vorgang kann durch WebAssembly und besonders durch die Verwendung von mehreren WASM-Threads signifikant beschleunigt werden, teilweise um den Faktor 5. Die Arbeit kommt zum Schluss, dass Webapplikationen durch den Einsatz von WebAssembly stark optimiert werden können. Allerdings ist WebAssembly keinesfalls eine eierlegende Wollmilchsau. Besonders das häufige Kopieren von Daten zwischen den Kontexten JavaScript und WebAssembly und das manuelle Binding und Kodieren von Datenstrukturen können den Geschwindigkeitsvorteil von WASM aufheben.

Die Demos können in den aktuellen Versionen von Firefox und Google Chrome getestet werden.