Webブラウザーで実行可能なバイナリー形式のファイルフォーマットであるWebAssembly(Wasm)。JavaScriptのプログラムよりも高速に動作するとされ、計算量の多い処理をWebブラウザーで実行する用途で注目を集めている。では、すべてのWebアプリケーションがJavaScriptからWasmに置き換わるかといえば、現状では可能性が低い。ここではWasmの実装時の注意点と、今後考えられるWasmのユースケースについて見ていこう。
読み込みに時間がかかりがち
WasmのプログラムはC++やRustといったプログラミング言語で記述したソースコードをコンパイルして生成する。コンパイル時にはWebブラウザー上で実行するためのライブラリーなどを一緒に組み込む。このためWebブラウザーが読み込むWasmのファイルサイズが大きくなりがちだ。一方、JavaScriptはWebブラウザーが備えるライブラリーを利用できる。基本的な処理であれば、Webブラウザー内に用意されたライブラリーを使えるので外部から新たなファイルを読み込む必要はない。
GMOインターネットの新里祐教特命担当技術分析官は「WasmのファイルサイズがJavaScriptに比べて1000倍になることもあった」と打ち明ける。GMOインターネットは2021年1月、サーバーサイドで実施していた画像処理の機能を、試験的にWasmで実装してクライアントサイドで実行してみた。フィルターをかけたり、アスペクト比を変えたりする計算量が多い画像処理をクライアントサイドで実行できれば、サーバーサイドの負荷を軽減できるのではないかと考えたからだ。
しかしJavaScriptで1キロバイトほどのコードだったが、同じ処理をWasmに変換したところ1メガバイトになってしまった。実際に動かしてみると「Wasmファイルの読み込みに時間がかかり、JavaScriptよりも実行時間が2~3倍長くなった」(新里分析官)。このようにWasmは読み込んだ後は高速に動作するとはいえ、処理全体にかかる時間が長くなってしまうことがある。
またWasmにコンパイルする前のプログラミング言語の中には、不要なメモリーを自動的に破棄するガベージコレクション(GC)や、例外処理といった仕組みを備えている言語がある。今後実装される可能性はあるが、現段階ではWasmの処理系にこうした仕組みはない。GCや例外処理を実現する機能を別途作り込んだり、こうした機能を備える処理系までをWasmにコンパイルしたりしなければならない。
さらにWasmはDOM(Document Object Model)を操作できない。それが可能なJavaScriptの方がUI制御が手軽に実現できる。現段階では、HTMLやJavaScriptで構築したWebサイトをWasmに置き換えるのは難しい。今後はJavaScriptとWasmを適材適所で利用することが重要である。