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.