Компилировать приложение Flex без отладки? Варианты оптимизации для гибкого компилятора? - PullRequest
4 голосов
/ 15 мая 2009

Я создал простое тестовое приложение со следующим кодом

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

Когда я запускаю приложение, оно очень медленно загружается, что означает, что «трассировка» запущена. Я проверяю флэш-плеер, щелкая правой кнопкой мыши, опция отладчика не включена.

Так что мне интересно, есть ли возможность поместить в компилятор, чтобы исключить трассировку. В противном случае мне придется вручную удалить все следы в программе.

Существуют ли другие варианты компилятора для максимальной оптимизации приложения flex?

Ответы [ 7 ]

3 голосов
/ 21 октября 2009

Использовать условную компиляцию, подробнее здесь .

В вашем кодовом наборе:

CONFIG::debugging { 
    trace(i);
}

Затем перейдите в Project-> Properties-> Flex Compiler и добавьте

-define=CONFIG::debugging,false
or
-define=CONFIG::debugging,true
3 голосов
/ 20 октября 2009

В 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);

Это обеспечивает несколько преимуществ по сравнению с обычной трассировкой:

  • Вы можете фильтровать (отключать) трассировки, чтобы видеть только то, что вы хотите:
    • Либо путем изменения массива фильтров
    • Или уровень для отображения только сообщений об ошибках или фатальных сообщениях
  • Вы можете заменить цель трассировки любым другим типом интерфейса ведения журнала, например,
    • Текстовое поле
    • текстовый файл
2 голосов
/ 17 октября 2009

Есть две опции компилятора, которые вы должны установить: -debug=false -optimize=true. В Flex Builder или Eclipse найдите «Проект-> Свойства-> Flex Compiler» и заполните поле «Дополнительные аргументы компилятора».

2 голосов
/ 16 мая 2009

Аргумент mxmlc debug позволяет добавлять или удалять функции отладки из SWF-файлов. Значение аргумента debug по умолчанию равно false для компилятора командной строки, но в Flex Builder необходимо вручную создать неотладочный SWF-файл. Согласно документации об аргументах компилятора , отладочная информация, добавляемая в SWF-файл, включает "номера строк и имена файлов всех исходных файлов". Нет упоминания о trace() вызовах функций, и я не думаю, что есть способ удалить их через аргумент компилятора, но вы можете проверить связанный документ для получения полного списка доступных аргументов.

2 голосов
/ 15 мая 2009

Вы можете найти / заменить весь проект. искать 'trace (' и заменять на '// trace ('. Это было бы достаточно быстро и легко отменить.

0 голосов
/ 08 августа 2011

Что-то еще, что вы можете сделать, это определить логическое имя с именем debugMode или что-то во внешнем файле констант .as где-нибудь и включить этот файл в любой проект, который вы используете. Затем, перед любым оператором трассировки, вы можете сначала проверить состояние этого логического значения. Это похоже на ответ Здмитра.

Должен сказать, мне нравится ответ edibleCode, и я с нетерпением жду возможности его попробовать.

0 голосов
/ 17 июня 2010

Перейдите в базовую директорию своего кода Flex (и закройте 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 {} \;

Затем настройте следующее в вашем Project-> Properties-> Flex 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 или в любом другом месте и это голый блок без фигурных скобок, то независимо от того, откомпилирован он или нет, он будет жаловаться.

...