ブラウザベースのゲームのパフォーマンスに関して、JIT(javascript / canvas)とAOT(Flash)はどのような関係がありますか?


8

私の経験では、今日まで、Flashベースのゲームよりも、JavaScript(Canvas)ベースのゲームのエンティティの動き/アニメーションの視覚的な遅れが多く見られます。

これはなぜですか-JavaScript対Flashの特定のシナリオにおけるJITコンパイラーとAOTコンパイラーの間の最も基本的なレベルでの不一致は正確には何ですか。


2
ブラウザのFlashコードは事前にコンパイルされていません。Flash Playerには、コードを解釈するための仮想マシンが含まれています。FlashがAOTコンパイルでサポートする唯一のプラットフォームはiOSです。
ジョッキング

回答:


4

ゲームを遅らせるのはコンパイル方法ではなく、ガベージコレクターであり、Flashガベージコレクターはブラウザーから独立しています。

私は、Firefoxを実行していることを確信を持って推論できると思います。Firefoxのガベージコレクターは、ゲームの観点から見ると、入手可能な最悪のがらくたです。1つのタブのみを開いて、その中で軽いJavaScriptゲームを実行する場合、通常は許容できますが、気付かないこともあります。しかし、たくさんのタブを開いたり、少し要求の厳しいものを実行したり、Firebugを使用したりすると、簡単に100ミリ秒を超える定期的なラグスパイクが発生します。

長いテストはしばらく行っていませんが、Chromeはこの点に関して常に非常に優れており、IE9とSafariのどちらも許容できる仕事をしているようです。

私はJavaScriptラグをテストするためのツールを作りました、あなたが好きならそれで遊ぶことができます:http : //ebusiness.hopto.org/lagtest/


上記の理由から実際にクロムを使用しているため、上記のミックスにほとんどガベージコレクションを投入しましたが、質問に焦点を当てたいと考えました。クロームでも、ガベージコレクションはフラッシュと比較してこの視覚的な遅れを引き起こします。素朴な観点から-この問題の解決策は何ですか(単なる「より良いガベージコレクション」のほかに)?
Anthony

@Anthonyおかしい、Chromeではこの問題はまったく見当たらない。私のラグテストを実行すると、緑色のバー以外は表示されますか?もちろん、いつでも実行に時間がかかりすぎるプログラムをいつでも作成できますが、それは問題ではありませんか?
aaaaaaaaaaaa 2012年

FFは過去数年間、不安なほど壊れやすいものでした。それが何であるかわからないが、重大なバグが無視されているアジャイルやスクラムのようなにおいが無視されている間、プラグインの作者に適応/アップグレードを強いるだけの一定のリリース。それはいまいましい恥です。
エリック・レッペン、

3

実際のコードを見ずに言うのは難しいですが、いくつかの点があります:

  • フラッシュはもっと長い間使われてきました。そのためのツールとライブラリを作成する人は、アニメーションの処理に多くの経験があります。私はツールや独自のテクノロジーの大ファンではありませんが、彼/彼女が何をしているかを知っているActionScript開発者をノックすることは決してありません。

  • JITブラウザーは、JS開発者にとっても比較的新しいものです。本当に洗練されたperfイニシアチブの最良の選択は、コミュニティとして整理しているものです。インライン関数のdefsは、多くの場合、境界線のばかげたことでした。これは、多くのJITシナリオでパフォーマンスを向上させる優れた方法です。

  • 多数のブラウザを正規化する必要はありませんが、多くの場合、特定のブラウザの全機能を最大限に活用できません。

  • (編集:これについては正しくありませんが、ここでポイントが残っている可能性があります-Erik)Flashプラグインはベクターに対応しており、それを最大限に活用する方法が広く理解されています。継承スキームがキャンバスコンテキストオブジェクトで私たちにたくさんの利益をもたらすかどうかはまだわからないのですが、ベクトルから抜け出すのと同じくらいの勝利になるとは思えません。


私はいくつかの用語について個人的に読み上げる必要がありますが、これも素晴らしい答えです。
Anthony

1
私はそれのベクトル側について間違っていたと思います。Canvasには、ベクターベースのAPIメソッドが組み込まれています。私は最近、あなたが常にビットマップを出力しているという事実について誤った仮定をした人によって、それについて誤って修正されたと思います。電車の中でO'ReillyのSupercharged JavaScript Graphicsを読んでいて、私は強くお勧めします。
エリック・レッペン、

3

FlashはまだJITコンパイルされており、ほとんどの最新のブラウザーではJavaScriptもそうですが、Flashは強く型付けされた言語です。 JavaScriptが動的に型付けされているため、JavaScriptが実行できない(メソッドへの呼び出しを直接発行する(JavaScriptが実行できない)など)ことができる最適化の領域全体があります。JavaScriptの関数の定義全体をいつでも置き換えることができ、その新しい定義を呼び出す必要があります。(JavaScriptが間接呼び出しを実行することは依然として可能ですが、それほど高価ではありません)フィールドへのフィールドアクセスは、JavaScriptが間接的に実行することさえできないため、実際にはメソッド呼び出しよりも良い例です。

パフォーマンスのもう1つの違いは、すでに述べたように、GCです。ほとんどのブラウザは参照カウントGCを使用していると思います(チェックしていません)。ページが離れると、ページに割り当てられたGCはすべて解放されるため、参照カウントGCを使用するのに最適な場所の1つです。 )、または保守的なスキャンGC(Boehmなど)。正しく実装されていない場合、後者は前者よりもかなり遅くなる可能性があります。(Boehmは正しい実装の例です)一方、Flashは正確なGCを使用します(厳密に型指定されたシステムでははるかに簡単です)。Flashは正確なGCを使用するため、参照カウントのランタイムオーバーヘッドがありません。(巨大ではありませんが、まだ存在しています)正確なGCの良い例は、MonoのSGenです。これにより、ヒープも圧縮されます。

次に、JavaScriptがアニメーションを考慮して設計されていないという事実があります。(また、言及されたように)私の知る限り、アニメーションループに対してSSEスタイルの命令を出力するブラウザーはありません。(生のアセンブリで書かれているいくつかの場所で)

全体として、動的言語は、ユーザーが遅いことに不満を言わないようにタイムリーにコンパイルする必要がある場合、静的に型付けされた言語よりも常に遅くなるという事実に帰着します。


ベンチマークを実行すると、Javaも強く型付けされ、高いパフォーマンスを発揮します。私は、基本的なサーバー側Webアプリのパフォーマンスコンテストで、Node.js開発者とJava開発者のどちらに対しても、平凡な才能レベルのすぐ上を想定して賭けます。強い型と弱い型は設計上のトレードオフであり、より多くのコードをジャグリングするときに愚かなことをする人間の手に任せたときにアプリがより速く実行されることを保証するものではありません。JS、Flash、またはJavaで3Dエンジンを作成することをお勧めします。
Erik Reppen 2013

0

異なる私見は、Flashがまさにそれを行うために地面から構築されたという事実、アニメーションから来ています。JSで手動でこれらの実装を行う必要がある場合、Flashは、デフォルトで実行されるよりスムーズな視覚化のために(主な判断では不十分ですが)技術を実装します。

私が目にするほとんどのFlashゲームよりもさらに優れたJS / Canvasの優れた実装の例があります。すべては、それらを作成する開発者が行います。


0

これらのテクノロジーのGC、JITの側面を除いて、ハードウェアの使用法にはギャップがあります。

最新バージョンのフラッシュプレーヤーでは、フラッシュはこれらの画像をレンダリングするためにハードウェアアクセラレーションに頼り始めました。これにより、レンダリングプロセスが高速になり、品質が向上します。一方、一部のブラウザー(FF、CHROME)でのJS駆動のゲームは、まだこれを開始していません。ただし、例外が1つありました。IE9ブラウザーは、ハードウェアアブストラクションレイヤーから再構築を開始しました。IE9のブラウザーは、ハードウェアアクセラレーションの利用に関して大幅な進歩を遂げたため、これらのブラウザーでのグラフィックスレンダリングは、他のブラウザーよりも明らかに優れて高速です。


余談ですが、chrome / ffでは、ハードウェアアクセラレーション(webgl)を強制できます。コードやブラウザーの構成設定を介して行われるかどうかにかかわらず、わずかな利点があります。いずれにせよ、私の仮定は、クロム/ ffのインプレッションはIE 9+よりも未成熟である
Anthony

@アンソニーうん、間違いなく同意します。今日、グラフィックスAPIの領域では、DXがOPENGLをかなり超えており、Chromeや他のブラウザがIE9よりも優れていることは、少なくとも短期間ではありません。
zinking
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.