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