書き物

技術とか作った物の話とか愚痴文句感想など

FlexCompilerShellを試してみる

AS3のコンパイル速度を超すばやくできる方法があるみたいです。それは「FlexCompilerShell」を使ってのコンパイルです。FlexBuilder上でのコンパイルはこの方式のようです。

使ってみようと思って日本語のサイトを探してみましたが見つからなかったので、とりあえず僕が試してみてうまくいった方法を書きます。


準備

まず、「FlexCompilerShell」(以降fcsh)を使う前提としてFlex2SDKの開発環境を構築しておかなければなりません。

ActionScript 3.0メモ


すでに済んでいる場合、バージョンが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


以上