Внедрение байт-кода as3 swf

В настоящее время я работаю над инструментом, который позволяет нам увидеть, какие функции занимают много времени в большом проекте as3 / Air (более 2000 классов), чтобы определить узкие места и функции, требующие оптимизации.

Один из способов добиться этого - использовать Flash Builder Profiler, но он очень медленный и дает сбой через 1-2 минуты. Другой способ - вручную записать файл с наиболее важной информацией, требующей много времени. Но это ручной процесс, и я не могу охватить все функции проекта.

Итак, я ищу способ вставить байт-код as3 прямо в скомпилированный swf. С помощью такого инструмента я буду вводить журнал после каждого вызова функции, и таким образом я смогу охватить все функции проекта.

Для этого существуют некоторые библиотеки as3 (AS3Commons ByteCode), но не t отлично работает с моим проектом (я получаю ошибку синтаксического анализа), а as3 работает медленно.


person Simon Eyraud    schedule 22.12.2010    source источник


Ответы (2)


Я вижу четыре варианта:

  • Во-первых, я думаю об Apparat Джоа Эберта (спасибо, чувак), который предоставляет инструменты для оптимизации байт-кода ABC, а также очень глубокий API для управления этим байт-кодом. Он написан на Scala, так что это также хороший момент, чтобы узнать об этом замечательном языке.

  • Кроме того, вы можете написать свой собственный инструмент. Формат ABC (байт-код ActionScript) хорошо документирован, а также его контейнер, формат файла SWF. Может быть не так уж сложно проанализировать оба файла на предмет интересных тегов и добавить необходимые инструкции в байт-код.

  • При более «простом» подходе, компилятор SWF и ABC, который использует большинство из нас, mxmlc, является открытым исходным кодом. Вы можете попробовать отредактировать код компилятора напрямую, чтобы делать то, что вы хотите. Все, что вам нужно для этого, находится на веб-сайте Adobe OpenSource Flex SDK.

  • И в качестве альтернативного ответа на ваш вопрос, вместо того, чтобы пытаться внедрить байт-код в SWF (который всегда будет влиять на производительность глобального приложения), вы можете использовать замечательные параметры AS3Trace / AS3DynamicProfile в mm.cfg, чтобы иметь полный журнал выполнения каждой функции, а также профилирующую информацию о выполнении кодов операций. Подробнее об этом здесь.

В заключение скажу, что такой внешний инструмент профилирования будет отличным приложением для открытого доступа и публикации в сообществе, поскольку в наши дни появляется все больше и больше «больших» проектов AS3. ;)

person Tyn    schedule 22.12.2010
comment
Также этот подход: stackoverflow.com/questions/357825/ - person Simon Eyraud; 22.12.2010

Наконец, я использовал скрипт Python, чтобы добавить As3 к каждому файлу скрипта действия. Мои работы можно найти здесь: http://code.google.com/p/as3-performances-analyzer/

person Simon Eyraud    schedule 14.01.2011