2009-05-15 5 views
4

私は次のコードデバッグなしでFlexアプリケーションをコンパイルしますか?フレックスコンパイラの最適化オプション?

var i : int; 
for (i=0; i<3000000; i++){ 
    trace(i); 
} 

で簡単なテストアプリケーション を作成している私は、アプリケーションを実行すると、それは「トレース」は実行されていることを意味する、ロードするために非常に遅いです。 右クリックしてフラッシュプレーヤーをチェックすると、デバッガオプションが有効になりません。

私はトレースを除外するためのコンパイラを入れるオプションがあるのだろうかと思います。 それ以外の場合は、プログラム内のすべてのトレースを手動で削除する必要があります。

フレックスアプリケーションを最大限に最適化するためのコンパイラオプションは他にありますか?

答えて

2

プロジェクト全体を検索/置換することができます。

+0

これは良い考えです。しかし、なぜflexがデバッグとリリース版のコンパイラオプションを提供していないのですか? – maoanz

+0

私はアドビではありませんので、私は知りません:) とにかくあなたのコードにトレースステートメントを残すことは良いことではありません。彼らは何かをチェックする前に常に削除する必要がありますが、理想と現実は異なるものですので、デベロッパーにとっては素晴らしい機能です。 個人的に私はトレースが好きではなく、ブレークポイントを使用することを好み、トレースを使用することはほとんどありません。 – kenneth

2

mxmlc引数debugは、SWFファイルからデバッグ機能を追加または削除することができます。デバッグ機能の値は、引数はデフォルトではコマンドラインコンパイラではfalseですが、Flex Builderでは、非デバッグSWFを手動で作成する必要があります。documentation on compiler argumentsによれば、SWFに追加されるデバッグ情報には、 "すべてのソースファイルの行番号とファイル名" 。trace()関数呼び出しについては言及されていませんが、コンパイラ引数でそれらを削除する方法はありませんが、リンクされたドキュメントで利用可能な引数のリスト全体をチェックすることは歓迎します。

2

There 2つのコンパイラopti設定する必要があります:-debug=false -optimize=true。 Flex BuilderまたはEclipseで、Project-> Properties-> Flex Compilerの下を見て、「Additional compiler arguments」というボックスを記入してください。

+1

これは本質的にリリースビルドに使用されるオプションです。リリースビルドをエクスポートすると、trace()ステートメントが削除されます。ループを2つの異なるボタンの後ろに配置すると、トレースと非トレースの2つのボタンの後ろにループが配置されます。トレースはデバッグビルドで永久に実行され、リリースビルドでは両方のボタンがクリックから等しく速く戻ります。 –

3

Flexには、ロギングAPIと呼ばれる機能が組み込まれています(詳しくはこちらhttp://livedocs.adobe.com/flex/3/html/logging_09.htmlを参照してください)。

基本的には、標準的なトレースよりもわずかに多くのコードを使用して、さまざまな方法でログ(トレース)することができますが、柔軟性が大幅に向上します。これは一例です:

<mx:TraceTarget id="logTarget" fieldSeparator=" - " includeCategory="true" includeLevel="true" includeTime="true"> 

      <mx:filters> 
       <mx:Array> 
        <mx:String>*</mx:String> 
       </mx:Array> 
      </mx:filters> 

      <!-- 
      0 = ALL, 2 = DEBUG, 4 = INFO, 6 = WARN, 8 = ERROR, 1000 = FATAL 
      --> 
      <mx:level>0</mx:level> 

    </mx:TraceTarget> 

としてトレースを登録します:

import mx.logging.Log; 
Log.getLogger("com.edibleCode.logDemo").info("This is some info"); 
Log.getLogger("com.edibleCode.logDemo").error("This is an error"); 

は次にあなたがする必要があるすべては、あなたのメインアプリケーションファイルで、トレース対象を作成するようなものである

Log.addTarget(logTarget); 

通常のトレースに比べていくつかの利点があります。

  • あなただけあなたが望むものを見るためにトレース(オフにする)フィルタリングすることができます:
    • どちらかを交換することができる唯一のエラーまたは致命的なメッセージ
  • を表示するためのフィルタ配列に
  • またはレベルを変更することで、トレースターゲットは、他のタイプのロギングインターフェイス、たとえば
    • AのTextField
    • テキストファイル
3

使用条件付きコンパイル、hereより。あなたのコードセットで

CONFIG::debugging { 
    trace(i); 
} 

次にプロジェクト - >プロパティ - > Flexコンパイラに移動し、あなたのフレックスコードベースディレクトリに

-define=CONFIG::debugging,false 
or 
-define=CONFIG::debugging,true 
0

ゴーを追加(および場合のFlex Builderをシャットダウンその実行 - それが実行中に物事を変更する場合、それは上品になる)。これを実行すると、すべてのトレース文が変更されます。ツリーをgitか何かにチェックしてからdiffを実行することをお勧めします(またはcp -rを実行してdiff -rなどを実行します)。唯一の主要な場合、トレース・ストリング内のセミコロンがある場合は、この意志を台無しにされています

find . -name '*.as' -exec perl -pe 'BEGIN{ undef $/; }s/trace([^;]*);/CONFIG::debugging { trace $1 ; };/smg;' -i {} \; 

find . -name '*.mxml' -exec perl -pe 'BEGIN{ undef $/; }s/trace([^;]*);/CONFIG::debugging { trace $1 ; };/smg;' -i {} \; 

を次に、あなたのプロジェクト - >プロパティ - >フレックスCompiler->追加コンパイラ引数で次のように設定します

-define=CONFIG::debugging,true -define=CONFIG::release,false 

と使用:

CONFIG::release { /* code */ } 

"の#else" 句のため。これは私がこの質問と回答のセットを読んだ後に選んだ解決策でした。

また、これを注意してください:

if(foo) 
{ 
    /*code*/ 
} 
else 
    CONFIG::debugging { trace("whoops no braces around else-clause"); }; 

すなわち、 ifやelseブロック、または中括弧を持たない裸ブロックにこれらのうちの1つだけがあれば、それがコンパイルされているかどうかに関わらず、それは文句を言うでしょう。

+0

@maoanz:あなたの答えは何ですか? – eruciform

+0

これはおそらくこの質問に対する最も複雑な答えでした –

0

debugModeというブール値を定義するか、外部の定数.asファイルの何かをどこかに定義して、このファイルを使用するプロジェクトに含めることができます。次に、トレースステートメントの前に、このブール値の状態を最初に確認することができます。これはzdmytrivの答えに似ています。

私はedibleCodeの答えが好きで、しばらく試してみることを楽しみにしています。

関連する問題