Rollup plugin für WASM Inlining

Nach meinen Erfahrungen mit WASM habe ich einen eigenes Rollup-Plugin geschrieben.

Schon vor einigen Jahren gab es hier einen Artikel, der den innovativen Ansatz zur Kompression von JSON namens brotli-unicode vorstellte. Nachdem ich mich nun mit WASM beschäftigen “musste”, lag es nahe, die beschriebenen Unzulänglichkeiten damit zu kompensieren.

Herausgekommen ist ein Plug-in für Rollup, das das Bundling von WASM-Dateien deutlich vereinfacht, indem es die Datei einfach in die erstellte JavaScript-Datei integriert (inline), ohne die klassischen Nachteile der Base64-Kodierung (Größenzuwachs um 33–37 %) zu haben.

Vergleichszahlen

Dieser Vergleich basiert auf der Implementierung aus diesem Blogbeitrag, der OxiGraph und das HDT-Rust-Modul umfasst.

Ohne Plugin

Größe (Bytes) Datei
1,191,284 wikidata-hdt/dist/client-sparql.js
2,609,124 wikidata-hdt/dist/client-sparql.js.map
714 wikidata-hdt/dist/client-sparql.scss
181,638 wikidata-hdt/dist/hdt_bg.wasm
3,954,968 wikidata-hdt/dist/web_bg.wasm

Ohne das Plugin werden die Datei wikidata-hdt/dist/client-sparql.js sowie beide WASM-Dateien benötigt. Insgesamt 5.327.890 Byte.

Mit Plugin

Größe (Bytes) Datei
3,060,899 wikidata-hdt/dist/client-sparql.js
4,493,750 wikidata-hdt/dist/client-sparql.js.map
714 wikidata-hdt/dist/client-sparql.scss
181,638 wikidata-hdt/dist/hdt_bg.wasm
3,954,968 wikidata-hdt/dist/web_bg.wasm

Für das Plugin wird lediglich die Datei wikidata-hdt/dist/client-sparql.js benötigt. Insgesamt 3.060.899. Das entspricht etwa 57,4 % der ursprünglichen Größe.

Das Plugin ist über NPM verfügbar, der Quellcode bei GitHub verfügbar.