javascript - español - ¿Cómo funciona Appcelerator Titanium Mobile?
cuanto cuesta appcelerator (3)
Estoy trabajando en la creación de una aplicación para iPhone con Titanium Mobile 1.0 y veo que se compila en un binario nativo para iPhone. ¿Como funciona esto? Parece que se necesitaría mucho trabajo pesado para analizar el código de JavaScript y hacer una traducción directa a Objective-C sin tener un lenguaje de superconjunto como 280 North''s Objective-J y Cappuccino.
Como dijo jhaynie, la aplicación está compilada en código nativo, pero todavía hay un intérprete en el lugar para ejecutar algunos javascript, lo que permite que la aplicación sea muy dinámica.
Si empaco mi código simple y amplio, obtengo un archivo ~ 80MB gzip (Código original ~ 1kB). Dentro del paquete, entre otros, puede encontrar mis archivos fuente html y js. También hay muchas bibliotecas (ssl por ejemplo) incluidas con el paquete (porque puede tener acceso de bajo nivel a muchas cosas dentro de este marco).
Creo que toman su código y envuelven algún tipo de software de intérprete y bibliotecas. En mi caso, sería como si empacara mi código html y js junto a un pequeño navegador que solo muestra mi sitio.
Sin embargo, siempre y cuando el código funcione en todos los sistemas compatibles de la misma manera, es algo bueno.
Titanium toma su código Javascript, lo analiza y lo preprocesa, y luego lo compila previamente en un conjunto de símbolos que se resuelven en función de los usos de aplicaciones de las API de Titanium. A partir de esta jerarquía de símbolos, podemos construir una matriz de dependencia de símbolos que se correlaciona con los símbolos de la biblioteca subyacente de Titanium para comprender qué API (y dependencias relacionadas, marcos, etc.) específicamente necesita su aplicación. Estoy usando el símbolo de palabra de una manera semicergénica ya que es un poco diferente en función del idioma. En iPhone, el símbolo se asigna a un verdadero símbolo C que finalmente se correlaciona con un archivo compilado .o que se ha compilado para las arquitecturas ARM / i386. Para Java, bueno, es más o menos un archivo .class, etc. Una vez que la interfaz puede entender su matriz de dependencia, entonces invocamos el compilador de SDK (es decir, GCC para iPhone, Java para Android) para luego compilar su aplicación en la final binario nativo.
Entonces, una manera simple de pensarlo es que su código JS se compila casi uno a uno en los símbolos representativos en el país natal. Todavía hay un intérprete ejecutándose en modo interpretado; de lo contrario, cosas como el código dinámico no funcionarían. Sin embargo, es mucho más rápido, mucho más compacto y se acerca lo más posible al mapeo nativo puro.
Obviamente todavía tenemos suficiente espacio para mejorar esto y trabajar en eso. Hasta ahora en nuestras últimas pruebas 1.0, es casi indistinguible del mismo código directo objetivo-c (ya que en la mayoría de los casos está exactamente asignado a eso). Desde el punto de vista de CompSci, ahora podemos comenzar a optimizar cosas que un humano realmente no podría hacer fácilmente, al igual que el compilador de GCC ya lo hace hoy.