Wasm で何かウェブアプリでも作ろうと思い、フォントのコンバータを作った。OpenType, WOFF, WOFF2 を相互に変換できる。
WOFF2 のデコード/エンコードに google/woff2 を Emscripten で wasm 化したものを使っている。
大きめのフォント、例えば NotoSansCJKjp とかを WOFF2 に変換すると手元のマシンだと 2 分くらいかかる。最初は Emscripten のランタイムか wasm のオーバーヘッドが大きいのかと邪推したけど、WSL 上でコンパイルしたネイティブの woff2_compress でも 1 分ぐらいかかることが判明した。google/woff2 のエンコード自体があまり大きいフォントに最適化されていないようだ。
Wasm のサイズは-Oz
を指定してコンパイルすると 925KB になった。Emscripten のランタイムを含む JS のほうは 26KB。このくらいならなんとか実用に使えるサイズ感な気がする。ランタイムのほうは使っていない部分が結構あるのでもっと小さくできそう。
こまごまとしたアップデートを今後やっていこうと思う。PWA 化とかしてみたい。