Перевод статьи посвященной новому режиму компиляции Adobe AIR, позволяющему быстрее компилировать приложения под iOS, без снижения производительности тестируемого приложения.В данной публикации, так же, наглядно представлен механизм работы старого и нового компилятора, приведена таблица сравнения и ключевые отличия в процессах компиляции.
Ссылка на оригинал: «Faster compiling with AIR for iOS»
Приложения AIR для iOS могут быть упакованы несколькими способами, при помощи опции Fast packaging (интерпретируемый режим) или Standard (скомпилированный режим) упаковки. Интерпретируемый режим, который прежде всего используется для отладки, быстрее компилируется, чем скомпилированный режим. Хотя большая часть разработки и тестирования могут быть выполнены, используя интерпретируемый режим, производительность во время выполнения хуже чем при использовании скомпилированного режима. Разработчики, публикующие приложения в AppStore, используют скомпилированный режим для лучшей производительности. Однако длительное время требуемое для упаковки в скомпилированном режиме, не вызывает позитвных эмоций.
AIR предоставляет перепроектировочный (re-designed) скомпилированный режим упаковки, который стремится значительно уменьшить время упаковки с сохранением такой же производительности во время выполнения. Бета-версия перепроектированного компилятора в настоящее время доступна всем разработчикам. ( речь в данном случае идет о AIR4, он же AIR 12 )
Обзор режима компиляции
При упаковке приложения AIR для iOS:
SWF файл разработчика анализируется, чтобы извлечь блоки байт-кода (Action Script Bytecode) (abc).
После анализа содержания abc, и используя API LLVM каждая функция AS переводится в соответствующую нативную функцию.
С помощью генератора кода LLVM, генерируется объектный файл для целевой платформы.
Создается исполняемый файл, линковка объектных файлов и библиотек AIR Runtime.
Платформа iOS не поддерживает динамически загружающийся исполняемый код. Это ограничение, однако позволяет упаковщику AIR использовать методы оптимизации для увеличения производительности во время выполнения. Эта оптимизация возможна, потому что весь код доступен во время компиляции. Посмотрите рисунок 1 для иллюстрации упаковки приложения AIR в скомпилированном режиме.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/681/17c/0df/68117c0df0f5c3c9b290411718d4a445.png)
Рис. 1
Устаревший компилятор v/s Новый компилятор
Новый компилятор создан поверх виртуальной машины Action Script. Далее — сравнение перепроектированного компилятора и устаревшего компилятора.
Посмотрите рисунки 2 и 3 для иллюстрации изменений в перепроектированном компиляторе.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/d49/180/dae/d49180dae931fa03328d5f3029fe6bb8.png)
Рис. 2
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/c4d/ebb/e93/c4debbe9399f9794c8cee28074124075.png)
Рис. 3
В AIR 14 Вы можете использовать любой из следующих методов, чтобы начать использовать новый компилятор.
Командная строка
Чтобы начать использовать новый компилятор для упаковки вашего IPA, используйте параметр –useLegacyAOT и установите его значение в no:
Flash Builder
Чтобы использовать эту функцию в Flash Builder 4.7:
1. Нажмите Project >Debug/Run > Debug Configurations/Run Configurations.
2. Нажмите Customize Launch в диалоговом окне Debug Configurations.
Окно Customize Launch Parameters выводит на экран все параметры, передаваемые в ADT вместе с их значениями. Посмотрите рисунок 4.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/49e/6c1/b87/49e6c1b87f3d805817d037ed94a3096a.png)
Рис. 4
3. Нажмите Add Parameter, чтобы добавить новый параметр для нового компилятора.
4. Введите -useLegacyAOT в поле имени и no в поле значения. Устновите новый параметр для Place before равный -provisioning-profile. Нажмите «OK», чтобы сохранить новый параметр запуска. Посмотрите рисунок 5.
Новый параметр запуска теперь будет выводится на экран в окне запуска Customize launch.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/68a/220/946/68a2209463f4b8337c2af059dc20bd65.png)
Рис. 5
5. Нажмите «OK», чтобы сохранить конфигурацию “Отладка/Выполнение”. Теперь упаковка будет с новым компилятором.
Flash Pro
Эта функция доступна в Flash Pro CC 2014 и позже. При упаковке для iOS выберите Enable faster packaging, чтобы включить -useLegacyAOT no.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/2fe/0e6/82f/2fe0e682f8d4f1d18897263d2f3e125a.png)
Начиная AIR 15.0, упаковочный режим с новый компилятором — является значением по умолчанию. Это означает, что для всех целей AOT таких как ipa-app-store, ipa-test, ipa-ad-hoc и ipa-debug, для упаковки используется новый компилятор. Вы не должны использовать переключатель –useLegacyAOT, чтобы использовать новый упаковочный режим компилятора.
Примечание: Если Вы хотите использовать старый упаковочный режим, используйте переключатель –useLegacyAOT со значением yes в командной строке, или во Flash Builder при упаковке IPA.
Новый компилятор значительно уменьшает время упаковки сохраняя ту же производительность.
Время упаковки
Рисунок 6 и 7 иллюстрирует, как новый компилятор почти в 5 — 20 раз быстрее, чем старый компилятор. Для небольших приложений усиление происходит главным образом из-за предварительно скомпилированной встроенной библиотеки.
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/996/30d/8a8/99630d8a8b095ee526499269aafdec75.png)
Рис. 6
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/0f3/121/e43/0f3121e43b42c16d0b1d3311276a2325.png)
Рис 7.
Производительность во время выполнения
Вы не должны заметить существенные изменения в производительности, во время выполнения приложений упакованных с использованием нового компилятора.
Сообщите в Adobe о любых проблемах с производительностью, если вы таковые испытываете во время выполнения вашего приложения.
Новая функциональность компилятора доступна как Бета-версия. Хотя это работает на большинство приложений, Вы можете испытать некоторые проблемы со стабильностью.
Для получения дополнительной информации посмотрите Известные Проблемы.
Ссылка на оригинал: «Faster compiling with AIR for iOS»
Введение
Приложения AIR для iOS могут быть упакованы несколькими способами, при помощи опции Fast packaging (интерпретируемый режим) или Standard (скомпилированный режим) упаковки. Интерпретируемый режим, который прежде всего используется для отладки, быстрее компилируется, чем скомпилированный режим. Хотя большая часть разработки и тестирования могут быть выполнены, используя интерпретируемый режим, производительность во время выполнения хуже чем при использовании скомпилированного режима. Разработчики, публикующие приложения в AppStore, используют скомпилированный режим для лучшей производительности. Однако длительное время требуемое для упаковки в скомпилированном режиме, не вызывает позитвных эмоций.
AIR предоставляет перепроектировочный (re-designed) скомпилированный режим упаковки, который стремится значительно уменьшить время упаковки с сохранением такой же производительности во время выполнения. Бета-версия перепроектированного компилятора в настоящее время доступна всем разработчикам. ( речь в данном случае идет о AIR4, он же AIR 12 )
Обзор режима компиляции
При упаковке приложения AIR для iOS:
SWF файл разработчика анализируется, чтобы извлечь блоки байт-кода (Action Script Bytecode) (abc).
После анализа содержания abc, и используя API LLVM каждая функция AS переводится в соответствующую нативную функцию.
С помощью генератора кода LLVM, генерируется объектный файл для целевой платформы.
Создается исполняемый файл, линковка объектных файлов и библиотек AIR Runtime.
Платформа iOS не поддерживает динамически загружающийся исполняемый код. Это ограничение, однако позволяет упаковщику AIR использовать методы оптимизации для увеличения производительности во время выполнения. Эта оптимизация возможна, потому что весь код доступен во время компиляции. Посмотрите рисунок 1 для иллюстрации упаковки приложения AIR в скомпилированном режиме.
![image](https://habrastorage.org/getpro/habr/post_images/681/17c/0df/68117c0df0f5c3c9b290411718d4a445.png)
Рис. 1
Устаревший компилятор v/s Новый компилятор
Новый компилятор создан поверх виртуальной машины Action Script. Далее — сравнение перепроектированного компилятора и устаревшего компилятора.
Старый компилятор | Новый компилятор |
---|---|
Разработанный с использованием Java и взаимодействовал с LLVM используя JNI, таким образом плохо влияя на производительность. | Разработанный с использованием C++ и большая часть его кода взята из виртуальной машиной. |
Генерирует вызов функции для каждого кода операций (abc opcode). | Преобразовывает код операции (abc opcode) в SSA на базе IR (промежуточное представление) и генерирует оптимизированный IR. |
Компилирует встроенную библиотеку каждый раз, когда приложение упаковано. | Выполняет инкрементную компиляцию, что означает, что встроенная библиотека скомпилирована только один раз и поставляется с SDK AIR. |
Посмотрите рисунки 2 и 3 для иллюстрации изменений в перепроектированном компиляторе.
![image](https://habrastorage.org/getpro/habr/post_images/d49/180/dae/d49180dae931fa03328d5f3029fe6bb8.png)
Рис. 2
![image](https://habrastorage.org/getpro/habr/post_images/c4d/ebb/e93/c4debbe9399f9794c8cee28074124075.png)
Рис. 3
Использование нового режима упаковки
В AIR 14 Вы можете использовать любой из следующих методов, чтобы начать использовать новый компилятор.
Командная строка
Чтобы начать использовать новый компилятор для упаковки вашего IPA, используйте параметр –useLegacyAOT и установите его значение в no:
<AIR SDK>/bin/adt -package -target ipa-app-store -useLegacyAOT no -provisioning-profile abc.mobileprovision -storetype pkcs12 -keystore abc.p12 HelloWorld.ipa HelloWorld-app.xml HelloWorld.swf
Flash Builder
Чтобы использовать эту функцию в Flash Builder 4.7:
1. Нажмите Project >Debug/Run > Debug Configurations/Run Configurations.
2. Нажмите Customize Launch в диалоговом окне Debug Configurations.
Окно Customize Launch Parameters выводит на экран все параметры, передаваемые в ADT вместе с их значениями. Посмотрите рисунок 4.
![image](https://habrastorage.org/getpro/habr/post_images/49e/6c1/b87/49e6c1b87f3d805817d037ed94a3096a.png)
Рис. 4
3. Нажмите Add Parameter, чтобы добавить новый параметр для нового компилятора.
4. Введите -useLegacyAOT в поле имени и no в поле значения. Устновите новый параметр для Place before равный -provisioning-profile. Нажмите «OK», чтобы сохранить новый параметр запуска. Посмотрите рисунок 5.
Новый параметр запуска теперь будет выводится на экран в окне запуска Customize launch.
![image](https://habrastorage.org/getpro/habr/post_images/68a/220/946/68a2209463f4b8337c2af059dc20bd65.png)
Рис. 5
5. Нажмите «OK», чтобы сохранить конфигурацию “Отладка/Выполнение”. Теперь упаковка будет с новым компилятором.
Flash Pro
Эта функция доступна в Flash Pro CC 2014 и позже. При упаковке для iOS выберите Enable faster packaging, чтобы включить -useLegacyAOT no.
![image](https://habrastorage.org/getpro/habr/post_images/2fe/0e6/82f/2fe0e682f8d4f1d18897263d2f3e125a.png)
Начиная AIR 15.0, упаковочный режим с новый компилятором — является значением по умолчанию. Это означает, что для всех целей AOT таких как ipa-app-store, ipa-test, ipa-ad-hoc и ipa-debug, для упаковки используется новый компилятор. Вы не должны использовать переключатель –useLegacyAOT, чтобы использовать новый упаковочный режим компилятора.
Примечание: Если Вы хотите использовать старый упаковочный режим, используйте переключатель –useLegacyAOT со значением yes в командной строке, или во Flash Builder при упаковке IPA.
Результаты
Новый компилятор значительно уменьшает время упаковки сохраняя ту же производительность.
Время упаковки
Рисунок 6 и 7 иллюстрирует, как новый компилятор почти в 5 — 20 раз быстрее, чем старый компилятор. Для небольших приложений усиление происходит главным образом из-за предварительно скомпилированной встроенной библиотеки.
![image](https://habrastorage.org/getpro/habr/post_images/996/30d/8a8/99630d8a8b095ee526499269aafdec75.png)
Рис. 6
![image](https://habrastorage.org/getpro/habr/post_images/0f3/121/e43/0f3121e43b42c16d0b1d3311276a2325.png)
Рис 7.
Производительность во время выполнения
Вы не должны заметить существенные изменения в производительности, во время выполнения приложений упакованных с использованием нового компилятора.
Сообщите в Adobe о любых проблемах с производительностью, если вы таковые испытываете во время выполнения вашего приложения.
Известные проблемы
Новая функциональность компилятора доступна как Бета-версия. Хотя это работает на большинство приложений, Вы можете испытать некоторые проблемы со стабильностью.
Для получения дополнительной информации посмотрите Известные Проблемы.