WebAssemblyとは?
WebAssembly(WASM)は、Webブラウザ上でアプリケーションを実行するためのバイナリフォーマット。
JavaScriptを補完もしくは代替する存在として注目を得ている。
WebAssemblyはC、C++、Rustなどのコンパイル言語をブラウザで動かせるように変換され、ネイティブ並みのパフォーマンスを提供する。
そもそもJavaScriptはなぜブラウザ上で動かせるのか?
JavaScriptの歴史
JavaScriptはWebページにインタラクティブな要素を追加するために開発された背景があり、Web標準化団体であるECMA Internationalによって、ECMAScriptという企画で標準化され、現在に至る。
この標準化により、ブラウザベンダー間でJavaScriptの一貫した実装が可能となり、開発者は幅広いブラウザで動作するスクリプトを作成できるようになった。
JavaScriptエンジン
ブラウザでJavaScriptが動作するのは、各ブラウザに組み込まれているJavaScriptエンジンによるもの。 このエンジンは、JavaScriptのコードを読み取り、実行可能なバイト、マシンコードに変換し、処理を行う。
実行の仕組み
-
パース
ブラウザがJavaScriptファイルを受け取ると、パーサーがコードをトークン化し、構文解析を行う。
これにより、抽象構文木(AST)が生成される。 -
コンパイル
ASTはJITコンパイラによって、中間コードやバイトコードにコンパイルされる。
※JITコンパイルは、実行中に最適化を行い、パフォーマンスを向上する仕組み -
実行
バイトコードは仮想マシンで実行され、必要に応じてネイティブコードに変換されてCPU上で動作する。
WebAssemblyとJavaScriptの違い
-
コンパイル済みバイナリ
WASMは事前にコンパイルされたバイナリ形式のため、ブラウザが直接実行でき、追加のコンパイルやJIT処理がほとんど不要になる。
これにより計算量が多いタスクやパフォーマンスが求められるアプリケーションで高い効果を発揮する。 -
低レベルアーキテクチャ
WebAssemblyは仮想マシンが抽象的な中間コードを解釈するのではなく、ほぼネイティブのCPU命令に近いコードを実行するため、ブラウザ内のパフォーマンスが向上する。
(補足)Node.jsとの関係性
Node.jsはJavaScriptがWebブラウザ外で動作できるようにしたランタイム環境。
※Node.js環境では、JavaScriptを用いてサーバーサイドロジックを記述し、Webアプリケーションのバックエンドを構築することが一般的
Node.jsはWebAssemblyをサポートしており、WebブラウザのようにWASMの実行が可能。
これにより、Node.jsでのアプリケーション開発においてもWebAssemblyを活用可能とのこと。