Ich arbeite daran, eine iPhone-App mit Titanium Mobile 1.0 zu erstellen, und sehe, dass sie zu einer nativen iPhone-Binärdatei kompiliert wird. Wie funktioniert das? Es scheint, als würde es viel Mühe kosten, den JavaScript-Code zu analysieren und eine direkte Übersetzung in Objective-C durchzuführen, ohne eine übergeordnete Sprache wie Objective-J und Cappuccino von 280 North zu haben.
javascript
objective-c
titanium
Darrell Brogdon
quelle
quelle
Antworten:
Titanium nimmt Ihren Javascript-Code, analysiert und verarbeitet ihn vor und kompiliert ihn dann in eine Reihe von Symbolen vor, die basierend auf der Verwendung von Titan-APIs durch Ihre Anwendungen aufgelöst werden. Aus dieser Symbolhierarchie können wir eine Symbolabhängigkeitsmatrix erstellen, die den zugrunde liegenden Symbolen der Titanium-Bibliothek zugeordnet ist, um zu verstehen, welche APIs (und zugehörige Abhängigkeiten, Frameworks usw.) speziell Ihre App benötigt. Ich verwende das Wortsymbol halb generisch, da es je nach Sprache etwas anders ist. Im iPhone wird das Symbol einem echten C-Symbol zugeordnet, das letztendlich einer kompilierten O-Datei zugeordnet wird, die für ARM / i386-Architekturen kompiliert wurde. Für Java ist es mehr oder weniger eine .class-Datei usw. Sobald das Front-End Ihre Abhängigkeitsmatrix verstehen kann, rufen wir den SDK-Compiler auf (dh GCC für iPhone,
Eine einfache Möglichkeit, darüber nachzudenken, besteht darin, dass Ihr JS-Code fast eins zu eins in die repräsentativen Symbole im Heimatland kompiliert wird. Es gibt immer noch einen Interpreter, der im interpretierten Modus ausgeführt wird, sonst würden Dinge wie dynamischer Code nicht funktionieren. Es ist jedoch viel schneller, viel kompakter und kommt dem reinen nativen Mapping so nahe wie möglich.
Wir haben offensichtlich noch viel Raum, um dies zu verbessern und daran zu arbeiten. Bisher ist es in unseren letzten 1.0-Tests kaum von demselben objektiven c-Direktcode zu unterscheiden (da es in den meisten Fällen genau darauf abgebildet ist). Vom Standpunkt von CompSci aus können wir jetzt jedoch damit beginnen, Dinge zu optimieren, die ein Mensch wirklich nicht so einfach tun kann - ähnlich wie es der GCC-Compiler bereits heute tut.
quelle
Wie jhaynie sagte, ist die Anwendung in nativen Code kompiliert, aber es gibt immer noch einen Interpreter, der Javascript ausführt, wodurch die Anwendung sehr dynamisch sein kann.
Appcelerator Titan
quelle
Wenn ich meinen einfachen umfangreichen Code verpacke, erhalte ich ein ~ 80MB gzip-Archiv (Originalcode ~ 1kB). Innerhalb des Pakets finden Sie unter anderem meine Quell-HTML- und JS-Dateien. Es gibt auch viele Bibliotheken (z. B. SSL), die mit dem Paket geliefert werden (da Sie in diesem Framework auf niedriger Ebene Zugriff auf viele Dinge haben können).
Ich denke, dass sie Ihren Code nehmen und eine Art Dolmetschersoftware und Bibliotheken umwickeln. In meinem Fall wäre es so, als würde ich meinen HTML- und JS-Code neben einen winzigen Browser packen, der nur meine Site anzeigt.
Solange der Code auf jedem unterstützten System auf die gleiche Weise funktioniert, ist es jedoch eine nette Sache.
quelle