誕生の背景
Adobe のFlashコンパイラ (ASC、ActionScript Compiler) はパフォーマンスが「昨日」すぎ、Flash 仮想マシンにはまだパフォーマンス向上の余地がたくさんあります。Flash はおもちゃのように扱われたり、冗談で CPU 食い物と呼ばれたりすることがよくあります。一般に、SWF を手動で最適化することはほとんどありません。ほとんどの場合、適切に実行できますが、SWF ファイルのサイズが大きすぎる場合、読み込み時間が長すぎる場合、またはコードの実行時間が長すぎる場合に、フレームが発生します。レートが高すぎる場合は、コードの合理化や静的リソース (写真、ビデオなど) の圧縮など、SWF の最適化を検討する必要があります。ただし、手動最適化によってもたらされるパフォーマンスの向上は非常に限られています。さらに多くの最適化タスクをコンパイラに任せるべきですが、ありがたいことに、 Apparatフレームワークは手動最適化の悪夢から解放されるだけでなく、将来の All 最適化 SWF も可能です。そこから最適化されます。 Apparat の著者であるJoa Ebert は、Flash パフォーマンス最適化の分野に深い洞察力を持っています。今年のFlashAndTheCityカンファレンスでは、joa の優れた業績により、「2010 年の最も天才的な Flash 開発者」と「2010 年の最も優れた貢献者」の2 つの賞を受賞しました。 「大賞。
ビルド環境
Apparat フレームワークは Scale を通じて作成されています。実践する前に、Scala 2.8.0 と Java 1.6 をインストールする必要があります。7 -zipのインストールはオプションです。これらの基本的な動作環境をセットアップした後 (PATH 環境変数に追加する必要があります)、最新のインストール パッケージ (現在 1.0RC8) をGoogle Codeからダウンロードできます。ダウンロード後、新しいフォルダーに解凍します。含まれるファイルは次のとおりです。
Apparat は、tdsi、ストリッパー、リデューサーなどの多くのコマンド ライン ツールと、いくつかの非常に特殊な ActionScript API (SWC ファイルに存在) を提供します。次に、Apparat がどのように Flash を高速化するかを見てみましょう。
バイトコードの最適化
Apparat のコア機能は TAAS (Three Address ActionScript Compiler) であり、TAAS は通常の最適化手法を使用するだけで、ActionScript のどの行も変更しません。 Adobe のコンパイラー ASC とは異なり、Apparat はコンパイルされた SWF および SWC ファイルを分析、再編成、再構築します。
Flash 仮想マシン AVM のバイトコードはスタックに基づいており、この構造は最適化が困難です。Apparat は、まずスタックベースのバイトコードを CFG (Control Flow Graph) に変換し、次にCFG を介してスタックレス TAC に変換します。 Address Code)コード、つまり TAAS (Three Address ActionScript)。
TAC/TAAS を使用すると、インライン展開、コピー伝播、定数フォールディング、デッド コード除去などのコンパイラ最適化手法に基づいてフラッシュ バイトコードを再最適化できます。
Apparat は、より効率的な API を備えたいくつかの便利な SWC ファイルを提供しており、ActionScript ではまだ利用できない Alchemy API も含まれています。これらの API を使用した SWF が Apparat によって処理された後、Apparat は対応するコードに対してインライン最適化を実行するため、実行効率が大幅に向上します。バイトコードを最適化するためのコマンドの形式は次のとおりです。
tdsi -i 入力.swf -o 出力.swf