コンテンツへスキップ

WebAssemblyはどれくらい速いのか

by : 2019/04/02

WebAssembly(WASM)はWebブラウザ上で動くプログラムです。JavaScriptとの違いはコンパイルされた実行ファイルであることで、JavaScriptのようにパースする必要がないので高速に処理されます。

高速とは言っても、どれくらい速いのか実行してみないと分からないでしょう。そこで試した結果を紹介します。

フィボナッチ関数を実行する

フィボナッチ関数はJavaScriptで書くと次のように表現されます。


function f(n) {
if (n <= 1) return 1;
return f(n 1) + f(n 2);
}

view raw

index.js

hosted with ❤ by GitHub

例えば5のフィボナッチ数は8、6のフィボナッチ数は13になります。小さな数であれば一瞬で求められますが、40くらいの数字になると時間がかかるようになります。同じ関数をRustで書くと次のようになります。


pub fn f(n:i32) -> i32 {
if n <= 1 {
1
} else {
f(n – 1) + f(n – 2)
}
}

view raw

index.rs

hosted with ❤ by GitHub

計算する

では実際に計算を行ってみた結果です(macOS Safariでの実行結果。ハードウェアの性能によって数値は異なります)。単位はmsです。

  JavaScript WASM
20 2 1
30 69 4
40 6,733 423
42 17,356 1,061
44 46,195 2,839

この結果から分かるのは、少ない数であればJavaScriptもWebAssemblyも殆ど変わりませんが、40以上になるとWebAssemblyが圧倒的に高速になります。50になるとJavaScript側で処理するのは現実的ではないでしょう。フィボナッチ関数に限らず、リストのソート処理であったり、ループ処理などはWebAssemblyの方が効率的なはずです。


WebAssemblyではネットワーク関数が使えない、DOMが扱えないと言った制限がありますが(現在解消されようとしています)、計算処理の速度においては使わない手はありません。開発できる言語はRustに限らず、様々な言語があります。ぜひWebAssemblyの活用を検討してください。

From → HTML5

コメントは受け付けていません。

%d人のブロガーが「いいね」をつけました。