FlexCompilerShellを試してみる
AS3のコンパイル速度を超すばやくできる方法があるみたいです。それは「FlexCompilerShell」を使ってのコンパイルです。FlexBuilder上でのコンパイルはこの方式のようです。
使ってみようと思って日本語のサイトを探してみましたが見つからなかったので、とりあえず僕が試してみてうまくいった方法を書きます。
準備
まず、「FlexCompilerShell」(以降fcsh)を使う前提としてFlex2SDKの開発環境を構築しておかなければなりません。
すでに済んでいる場合、バージョンが2.0.1であることを確認してください。古いバージョンの場合、この方法では正常にコンパイルできないようです。(たぶん)
ダウンロードとインストール
【Page not found « Adobe Blogs】
こちらのページから「Flex Compiler Shell」の項の「(ZIP ファイル, 72KB)」からダウンロードして下さい。次にダウンロードしたZIPファイルを適当な場所に解凍してください。解凍して出てきた「bin」と「lib」フォルダをFlex2SDKのフォルダにコピーして「bin」と「lib」フォルダに上書きしてください。これでインストールは終了です。
使用方法
まずコマンドプロンプト上で「fcsh」と入力して下さい。
D:\>fcsh
するとインストールしたfcsh.exeが起動します。
D:\>fcsh Adobe Flex Compiler SHell (fcsh) Version 2.0.1 build 155542 Copyright (c) 2004-2006 Adobe Systems, Inc. All rights reserved. (fcsh)
この「(fcsh)」の後にいつものFlex2SDKでのコンパイルと同じように「mxmlc」とファイル名を指定してコンパイルします。今回は例として『Sword』をコンパイルしてみます。
(fcsh) mxmlc Sword/src/Sword.as fcsh: Assigned 1 as the compile target id 設定ファイル "D:\flex_sdk_2\frameworks\flex-config.xml" をロードしてい ます 設定ファイル "D:\Sword\src\Sword-config.xml" をロードしています 最初の設定 : 1562ms 8 個の SWC がロードされました : 4487ms ファイル :286 時間 : 45075ms リンクしています... 340ms 最適化しています... 952ms SWF エンコーディング中... 26157ms D:\Sword\src\../bin/Sword.swf (2967122 bytes) 合計時間 :78603ms ピークメモリ使用量 :116 MB (ヒープ :101, ヒープ以外 :15) (fcsh)
結果、78秒ぐらい。『Sword』の開発終盤ではコンパイルの度にこれだけ待っていました。よくがまんしてましたよ。
で、fcshではこのコンパイルをうまいことして、次回から超ッ高速に実行してくれます。上の実行結果の「fcsh: Assigned 1 as the compile target id」の「1」という数値がIDとなり、以降コンパイルを行いたいIDを指定してコンパイルします。先ほどの『Sword』のソースを少し弄って再コンパイルしてみます。書式は「compile <ID>」。
(fcsh) compile 1 設定ファイル "D:\flex_sdk_2\frameworks\flex-config.xml" をロードしてい ます 設定ファイル "D:\Sword\src\Sword-config.xml" をロードしています 最初の設定 : 30ms 8 個の SWC がロードされました : 140ms 再コンパイル: D:\Sword\src\Sword.as 理由: ソースファイルまたはインクルードされているファイルのいずれかが更新されまし た。 変更されたファイル :1 影響を受けるファイル :0 ファイル :286 時間 : 3095ms 合計時間 :3265ms ピークメモリ使用量 :119 MB (ヒープ :104, ヒープ以外 :15) リンクしています... 120ms 最適化しています... 511ms SWF エンコーディング中... 26488ms D:\Sword\src\../bin/Sword.swf (2967125 bytes) 合計時間 :27129ms ピークメモリ使用量 :135 MB (ヒープ :120, ヒープ以外 :15) (fcsh)
結果30秒。速い!スゲェ速いッ!百万倍も速い!
『Sword』は全素材をSWFに埋め込んでいるので、もしかしたらSWFのエンコーディングに影響を与えているのかもしれません。うまいこと作っていればもっと速くなっていたかも?
fcshを終了するには「quit」とします。
(fcsh)quit
基本的な使い方はこれぐらいですかね。
終わりに
『Sword』での比較ではコンパイル速度が1/2~1/3ぐらいになりました。『Sword』という例がまずかったのでしょうか?こちらの結果では100倍速くなっているようです。
【 ActionScript3 (mxmlc) でのコンパイルを100倍速にする方法 - 川o・-・)<2nd life】
以上