
FirefoxにおけるJavaScriptの実行速度、C++にまた一歩迫る 80
ストーリー by hylom
asm.jsは楽しそうだ 部門より
asm.jsは楽しそうだ 部門より
あるAnonymous Coward 曰く、
Firefoxでは特定のJavaScriptコードを高速に実行する「asm.js」という仕組みがある。高速とは言えども、今年頭の時点ではネイティブコードの半分程度の速度でしか実行できなかったのだが、コード翻訳ツールおよびJavaScriptエンジンの最適化を進めた結果、現在ではネイティブコードと比べて1.5倍遅い(同じ処理の実行に1.5倍の時間がかかる)程度にまで改善が進んだそうだ(Mozilla Hacks、マイナビニュース)。
最適化は多くの局面で行われたとのことだが、一例としてあげられているのは浮動小数点演算で、64ビットのdouble型演算の代わりに、可能な限り32ビットのfloat型の演算を使用することで、大幅にその演算速度が向上したという。
この方法はほかのブラウザのJavaScript実行環境にも適用可能で、今後さらにほかのブラウザでの実行速度が高速になる可能性があるとのこと。
ネイティブコードに近付いて当然 (スコア:2)
時間を掛けてコンパイルできない分、凝った最適化が出来無い中での結果なんで、そこは凄いなと思う。
ただ、これでWebGL使って全画面のアプリを作れば、HTMLとか全て無視した普通のアプリが動いちゃうんだろうな。
まぁネイティブアプリが簡単にマルチプラットフォーム化できればありがたいけど。
Re:ネイティブコードに近付いて当然 (スコア:1)
あなたこそ少し誤解している風に見受けられます。
asm.jsは普通に人が書いたJavaScriptを実行する為のエンジンは使用していません。
まったく別のエンジンを使用して動かしているので、一般的なJSエンジンの挙動はしないと思われます。
そもそも、CやC++から変換したコードの実行が主なのでGCする必要がないのに、あえて速度を落としてまで
するんですかね?
> JSはネイティブに匹敵する速度
いや、全然違います…
asm.jsはその名の通りアセンブラ代わりに使っているだけです。
(ただ、Firefox以外のエンジンでも普通に動かせるところが画期的ですが)
で、AOTのコンパイラが実行時に全部機械語に変換して実行しているだけなんです。
Re:ネイティブコードに近付いて当然 (スコア:1)
> そもそも最初から最後までasm.js空間で実行される場合にはGCされないとみなすことが出来ますが
ということは、やっぱりGCされないと考えていいんですよね?
多分"use asm"が定義されているスコープ内ではGCされないだろうなという認識であってるかな。
関数毎にも指定できるから、その関数を抜けるとGCが走ると。