2009-05-15 3 views
4

Ich habe eine einfache Testanwendung erstellt mit dem folgenden CodeKompilieren Sie die Flex-Anwendung ohne Debug? Optimierungsmöglichkeiten für Flex Compiler?

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

Wenn ich die Anwendung ausführen, es ist sehr langsam zu laden, was bedeutet, dass die „Spur“ läuft. Ich überprüfe den Flash-Player mit der rechten Maustaste, die Debugger-Option ist nicht aktiviert.

Also frage ich mich, ob es eine Option gibt, in Compiler die Spur auszuschließen. Ansonsten muss ich manuell alle Spuren im Programm entfernen.

Gibt es noch andere Optionen des Compilers, um die Flex-Anwendung auf maximale Weise zu optimieren?

Antwort

2

Sie könnten eine Suche/ersetzen für das gesamte Projekt durchführen. Suche nach 'trace (') und ersetzen durch '// trace ('. Das wäre schnell genug und leicht rückgängig zu machen.

+0

Das ist eine gute Idee. Aber warum bietet Flex keine Compiler-Option für die Debug- und Release-Version? – maoanz

+0

Ich bin nicht von Adobe, also weiß ich nicht :) Es ist nicht gute Praxis, Spuren in Ihrem Code trotzdem zu verlassen. Sie sollten immer entfernt werden, bevor man alles eincheckt, aber Ideale und Realität sind unterschiedliche Dinge, so dass es für einige Entwickler ein nettes Feature wäre. Persönlich mag ich keine Spur, lieber Breakpoints verwenden, sehr selten Trace verwenden. – kenneth

2

Das mxmlc-Argument debug ermöglicht es Ihnen, Debug-Funktionen aus SWF-Dateien hinzuzufügen oder zu entfernen. Der Wert des Debug Argument ist für den Befehlszeilencompiler standardmäßig falsch, aber in Flex Builder müssen Sie eine SWF-Datei ohne Debugfunktion manuell erstellen. Gemäß der documentation on compiler arguments enthält die der SWF hinzugefügte Debuginformation "Zeilennummern und Dateinamen aller Quelldateien". Es gibt keine Erwähnung von trace() Funktionsaufrufen, und ich glaube nicht, dass es eine Möglichkeit gibt, sie durch ein Compilerargument zu entfernen, aber Sie können das verknüpfte Dokument für die gesamte Liste der verfügbaren Argumente überprüfen

2

Dort sind zwei Compiler opti ons, die Sie einstellen sollten: -debug=false -optimize=true. Suchen Sie in Flex Builder oder Eclipse unter Projekt-> Eigenschaften-> Flex-Compiler und füllen Sie das Feld "Zusätzliche Compiler-Argumente" aus.

+1

Dies sind im Wesentlichen die Optionen, die für einen Release-Build verwendet werden. trace() -Anweisungen werden entfernt, wenn Sie einen Release-Build exportieren. Dies ist offensichtlich, wenn Sie Ihre Schleife hinter zwei verschiedenen Schaltflächen platzieren, eine mit einer Ablaufverfolgung und eine ohne - die Ablaufverfolgung wird für immer im Debug-Build ausgeführt und im Freigabe-Build kehren beide Schaltflächen vom Klick gleich schnell zurück. –

3

Es gibt ein wirklich süßes Feature in Flex namens Logging-API (mehr dazu lesen Sie hier http://livedocs.adobe.com/flex/3/html/logging_09.html).

Grundsätzlich protokollieren (verfolgen) Sie Dinge auf eine andere Art und Weise, mit etwas mehr Code als eine Standard-Ablaufverfolgung, aber es ermöglicht Ihnen viel größere Flexibilität. Dies ist ein Beispiel:

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

Dann alles, was Sie tun müssen, ist in der Hauptanwendungsdatei, so etwas wie eine Spur Ziel zu erstellen:

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

und registrieren Sie die Spur mit:

Log.addTarget(logTarget); 

Dies bietet mehrere Vorteile gegenüber der normalen Ablaufverfolgung:

  • Sie können filtern (ausschalten) -Spuren nur um zu sehen, was Sie wollen:
    • entweder durch den Filter Array
    • Oder das Niveau zu zeigen, nur Fehler oder schwerwiegende Meldungen
  • modifizieren können Sie ersetzen das Ablaufverfolgungsziel mit jeder anderen Art von Protokollierungsschnittstelle, z
    • A TextField-
    • Eine Textdatei
3

Verwenden bedingte Kompilierung, mehr here.

In Ihrem Code Set:

CONFIG::debugging { 
    trace(i); 
} 

Dann auf Ausbau-> Einstellungen-> Flex Compiler und fügen

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

Gehen Sie zu Ihrem Flex Code-Basis-Verzeichnis (und herunterzufahren, wenn Flex Builder es läuft - es wird toll, wenn Sie Dinge ändern, während es läuft. Führen Sie dies aus, um alle Ihre Trace-Anweisungen zu ändern. Ich empfehle, zuerst den Baum in git oder etwas zu überprüfen und dann ein diff auszuführen (oder cp -r den Baum, um ein diff -r oder etwas zu machen). Der einzige große Fall wird dieser vermasseln, wenn Sie Semikolons innerhalb Spur Saiten:

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 {} \; 

Dann wurde die folgende in Ihrer Ausbau-> Einstellungen-> Flex Compiler-> Zusätzliche Compiler Argumente ein:

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

und Verwendung:

CONFIG::release { /* code */ } 

für die "#else" -Klausel. Dies war die Lösung, die ich nach dem Lesen dieser Frage und Antwort ausgewählt habe.

Auch diese Vorsicht:

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

D.h. Wenn du NUR eins von diesen in einem if oder sonst oder was auch immer Block hast, und es ist ein nackter Block ohne Klammern, dann wird es sich, egal ob es kompiliert ist, beschweren.

+0

@maoanz: Gab es irgendwelche Antworten für Sie? – eruciform

+0

das war wahrscheinlich die komplizierteste Antwort auf diese Frage möglich –

0

Etwas anderes, was Sie tun könnten, ist einen booleschen Namen namens debugMode oder etwas in einer externen Konstanten .as-Datei irgendwo zu definieren und diese Datei in jedes Projekt, das Sie verwenden, einzuschließen. Vor jeder Trace-Anweisung können Sie dann zuerst den Status dieses Boolean überprüfen. Das ist ähnlich wie bei zdmytrivs Antwort.

Ich muss sagen, ich mag easycode's Antwort und freue mich darauf, es einige Zeit zu versuchen.