As3 SWF инъекция байт-кода

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам