![](https://habrastorage.org/getpro/habr/post_images/611/4e4/433/6114e4433e5a46cdb1a5f84e8664e3de.png)
たとえば、Emscriptenコンパイラーを使用してAsm.jsでC ++コードをコンパイルした後、以前はパフォーマンスの低下は約2倍でしたが、現在ではAsm.jsコードはネイティブプログラムの1.5倍以下です。
実行される最適化の一部は小さくて重要ではありませんが、他の最適化はより深刻です。 たとえば、最近、Firefoxは特定の浮動小数点演算を最適化して、float64数値の代わりに精度の低いfloat32数値で計算を実行することを学びました。これにより、パフォーマンスが大幅に向上します。 Asm.js、Emscriptenコンパイラ、およびSpiderMonkeyエンジンに対応する変更が加えられました。
この図は、clang 3.2(単位として取得)と比較した、さまざまな環境での操作の速度を示しています。 時間が短いほど、より良い結果になります。
![](https://habrastorage.org/getpro/habr/post_images/ad3/88b/1b4/ad388b1b405f42fe3771fde13572cdca.png)
赤は、32ビットの数字(firefox-f32)を使用して生成されたEmscriptenコードでFirefoxを示しています。 ご覧のとおり、Asm.jsの操作は、オペレーティングシステムのネイティブ速度に非常に近い速度で実行されます。 最大の違いは同じ1.5倍であり、場合によってはFirefoxのパフォーマンスがさらに向上します。
開発者はさらに最適化を続けることを約束しますが、現在では、たとえば、Unreal Engine 3エンジンはブラウザで正常に動作します。 かつて、これはAsm.jsの最初のデモの1つでした。