Как работает Appcelerator Titanium Mobile?

Я работаю над созданием приложения для iPhone с Titanium Mobile 1.0 и вижу, что оно компилируется в двоичный файл для iPhone. Как это работает? Похоже, что для анализа кода JavaScript и выполнения прямого перевода на Objective-C потребовалось бы немало усилий, не имея такого расширенного языка, как Objective-J 280 North и Cappuccino.

3 ответа

Решение

Titanium берет ваш код Javascript, анализирует и предварительно обрабатывает его, а затем предварительно компилирует его в набор символов, которые разрешаются на основе ваших приложений, использующих API-интерфейсы Titanium. Из этой иерархии символов мы можем построить матрицу зависимостей символов, которая отображается на символы базовой библиотеки Titanium, чтобы понять, какие API (и связанные зависимости, платформы и т. Д.) Конкретно нужны вашему приложению. Я использую символ слова в полуграничном виде, так как он немного отличается в зависимости от языка. В iPhone этот символ отображается на настоящий символ C, который в конечном итоге отображается на скомпилированный файл.o, скомпилированный для архитектур ARM/i386. Что касается Java, то это более или менее файл.class и т. Д. После того, как внешний интерфейс сможет понять вашу матрицу зависимостей, мы затем вызываем компилятор SDK (т. Е. GCC для iPhone, Java для Android), чтобы затем скомпилировать ваше приложение в финальную версию. родной двоичный файл

Таким образом, простой способ думать об этом состоит в том, что ваш код JS скомпилирован почти один в один в репрезентативные символы на родине. Там все еще работает интерпретатор в интерпретируемом режиме, иначе такие вещи, как динамический код, не будут работать. Тем не менее, он намного быстрее, намного более компактен и настолько близок к чистому нативному отображению, насколько это возможно.

Очевидно, у нас еще есть много возможностей, чтобы улучшить это и работать над этим. До сих пор в нашем последнем тестировании 1.0 он почти не отличался от того же прямого кода Objective-C (поскольку в большинстве случаев он точно соответствует этому). Однако с точки зрения CompSci мы можем теперь приступить к оптимизации вещей, которые на самом деле не мог бы сделать человек, как это делает компилятор GCC сегодня.

Как сказал jhaynie, приложение скомпилировано в нативный код, но все еще существует интерпретатор для запуска некоторого javascript, который позволяет приложению быть очень динамичным.

титановый ускоритель

Если я упаковываю свой простой достаточный код, я получаю gzip-архив размером ~80 МБ (исходный код ~1 КБ). В пакете - среди прочего - вы можете найти мои исходные файлы html и js. Есть также много библиотек (например, ssl), поставляемых с пакетом (потому что вы можете иметь низкоуровневый доступ ко многим вещам в этой среде).

Я думаю, что они берут ваш код и обертывают какое-то программное обеспечение и библиотеки для интерпретатора. В моем случае это было бы, как если бы я упаковал свой HTML и JS-код рядом с крошечным браузером, который отображает только мой сайт.

Однако, если код работает на всех поддерживаемых системах одинаково, это хорошо.

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