4

次のコードで簡単なテスト アプリケーションを作成しました。

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

アプリケーションを実行すると、ロードが非常に遅くなります。これは、「トレース」が実行されていることを意味します。右クリックして Flash Player を確認しましたが、デバッガー オプションが有効になっていません。

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

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

4

7 に答える 7

3

条件付きコンパイルを使用します。詳細はこちら.

コード セット内:

CONFIG::debugging { 
    trace(i);
}

次に、[プロジェクト] -> [プロパティ] -> [Flex コンパイラ] に移動して追加します

-define=CONFIG::debugging,false
or
-define=CONFIG::debugging,true
于 2009-10-20T23:46:59.730 に答える
3

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

基本的には、別の方法でログ (トレース) を記録します。確かに、標準のトレースよりもわずかに多くのコードを使用しますが、はるかに高い柔軟性が得られます。これは例です:

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

あとは、メイン アプリケーション ファイルに次のようなトレース ターゲットを作成するだけです。

<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>

トレースを次のように登録します。

Log.addTarget(logTarget);

これには、通常のトレースよりもいくつかの利点があります。

  • トレースをフィルタリング (オフ) して、必要なものだけを表示できます。
    • フィルター配列を変更することによって
    • または、エラーまたは致命的なメッセージのみを表示するレベル
  • トレース ターゲットを他のタイプのロギング インターフェイスに置き換えることができます。
    • テキストフィールド
    • テキストファイル
于 2009-10-20T11:17:59.903 に答える
2

mxmlc 引数debugを使用すると、SWF ファイルからデバッグ機能を追加または削除できます。コマンド ライン コンパイラでは、debug 引数の値はデフォルトで false ですが、Flex Builder では、非デバッグ SWF を手動で作成する必要があります。コンパイラ引数に関するドキュメントによると、SWF に追加されるデバッグ情報には、「すべてのソース ファイルの行番号とファイル名」が含まれます。関数呼び出しについては言及されtrace()ておらず、コンパイラの引数を介してそれらを削除する方法はないと思いますが、リンクされたドキュメントで使用可能な引数の完全なリストを確認してください。

于 2009-05-15T23:01:13.627 に答える
2

設定する必要があるコンパイラ オプションは 2 つあります-debug=false -optimize=true。Flex Builder または Eclipse で、[プロジェクト] -> [プロパティ] -> [Flex コンパイラ] の下を見て、[追加のコンパイラ引数] というラベルの付いたボックスに入力します。

于 2009-10-16T20:59:08.533 に答える
2

プロジェクト全体で検索/置換を実行できます。「trace(」を検索し、「//trace(」に置き換えます。これは十分に迅速で、簡単に元に戻すことができます。

于 2009-05-15T10:35:15.043 に答える
0

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

言うまでもなく、私はedibleCodeの答えが好きで、いつか試してみるのを楽しみにしています。

于 2011-08-08T10:09:57.657 に答える
0

フレックス コードのベース ディレクトリに移動します (実行中の場合は Flex Builder をシャットダウンします。実行中に何かを変更すると、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 {} \;

次に、[プロジェクト] -> [プロパティ] -> [Flex コンパイラ] -> [追加のコンパイラ引数] で次のように設定します。

-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 つだけがあり、それが中括弧のない裸のブロックである場合、それがコンパイルされているかどうかに関係なく、エラーが発生します。

于 2010-06-17T16:09:37.750 に答える