Christian hat in einem Artikel das Titanium Framework von Appcelerator erwähnt. Ich kannte es vorher nicht und habe es mit die letzten Tage einwenig näher angesehen. Aktuell habe ich ein konkretes Projekt, das ich eigentlich wieder mit GWT umsetzen wollte, aber Titanium scheint mir eine echte, und vielleicht sogar bessere Alternative zu sein.
In Titanium wird der Programmcode in JavaScript geschrieben und als nativer Code auf der jeweiligen Platform (Android oder iPhone) ausgeführt. Das ist der große Vorteil. Während ich den Code nur einmal schreibe, ist er dank dem Framework auf mehreren Plattformen lauffähig.
Titanium übernimmt dabei die Rolle eines Proxies. Während bei GWT der Java Code von einem echten Cross-Compiler in JavaScript Code übersetzt wird, interpretiert Titanium den JavaScript Code auf der jeweiligen Plattform und delegiert die Funktionsaufrufe an Module. Diese Module setzen dann die Funktionsaufrufe nativ um. An sich kein schlechter Ansatz. Doch der Code wird interpretiert, deshalb ist er nicht sonderlich schnell.
Das Ergebnis ist, dass mit relativ wenig Code Standardfunktionalität umgesetzt werden kann. Standard deshalb, weil natürlich nur die Funktionen genutzt werden können, die dem Titanium Framework als Modul zu Verfügung stehen. Möchte der Entwickler Funktionen nutzen, die es in Titanium nicht gibt, kann er eigene Module implementieren und damit Titanium erweitern.
Ich habe beim Entwickeln sowohl ein freudiges Grinsen als auch Verzweiflung im Gesicht gehabt und bis jetzt bin ich mir immer noch nicht schlüssig.
Vorteile
- Schnelle Erfolgserlebnisse und Ergebnisse
- Code ist komplett in JavaScript. Daher kein Erlernen einer neuen Sprache
- Native Anwendung
- Großer Funktionsumfang, viele Module
- Automatisches Deployment auf das Gerät und den Simulator
- Schnelles Bauen, da nur wenig übersetzt werden muss
- Konsole mit Log-Ausgaben
Nachteile
- Keine Möglichkeit zum Debuggen Ich schreibe den Code in IDEA, wechsele dann in den Titanium Developer und führe mein Programm aus. Um den Code zu Debuggen, müsste es eine Integrationsmöglichkeit für die IDE geben. Da Titanium noch sehr jung ist, kann es aber durchaus sein, dass dies bald kommt.
-
Wenig Transparenz Bis auf die Log-Ausgaben sehe ich leider nicht, was mein Programm macht. Manchmal ist mein Simulator abgestürzt oder startete das Programm nicht. In vielen Fällen gab es keinen Anhaltspunkt zu der Ursache. Ein
exit(null)reicht als Fehlerbeschreibung nicht. -
Hohe Fehlertoleranz, wenig Feedback In Titanium werden statische “create” Methoden genutzt, um Instanzen anzulegen. Diese Instanzen werden durch Parameter konfiguriert. z.B.
1 2 3 4 5 6
var view = Titanium.UI.createView({ borderRadius:10, backgroundColor:'red', width:50, height:50 });
Titanium schluckt fast alles. Es gibt leider keine Überprüfung darüber, ob ein Parameter erlaubt ist, oder ob er einen gültigen Wert bekommen hat. Dadurch weis ich als Entwickler nicht, aber ich das Objekt falsch konfiguriert habe, oder ob der Fehler eine andere Ursache hat.
- Organisation von JavaScript Dateien in Ordnern ist zwar möglich, bringt aber Probleme mit sich. Ich habe meine “Views” in einem Unterordner liegen gehabt. Relativ zu der
app.js. Die Dateien wurden alle richtig gefunden und interpretiert. Als ich das Programm jedoch ausgeführt, von einem Fenster zu einem anderen und wieder zurück, navigiert habe, wurde auf einmal der Pfad zu der JavaScript Datei falsch zusammengebaut. Daraufhin stürzte mein Programm ab. - Performanz Obwohl die Ausführungszeit nicht schlecht ist, gibt es einige Stolperfallen. Beispiel TableView. In der
createTableViewMethode wird ein Array mit den Zeilen der Tabelle übergeben. Diese Zeilen sollten zuvor erzeugt und dann der TableView auf einen Schlag übergeben werden – was auch klappt. Leider ist die Erzeugung der Zeilen in einer Schleife alles andere als performant. Handelt es sich um einfache Texte, dann geht dies relativ zügig. In meinem Fall bestand eine Zeile aus einer View mit drei Labels. Für die Erzeugung von nur 25 Zeilen mit statischem Inhalt hat auf meinem iPhone 3g 2-3 Sekunden gedauert. Kommen die Daten von einem Server, muss die Latenz und Serverzeit addiert werden. Ich kann mir vorstellen, dass sich dieser Wert verdoppeln kann.
Insgesamt kann ich aber sagen, dass die Vorteile knapp überwiegen, so dass ich auf jeden Fall meine aktuelle App mit Titanium realisieren werde.

Hi, wie weit bist du mit deiner App? Wie sind deine Erkenntinisse im Umgang mit Titanium?
Hi Johe, ich bin ziemlich schnell an Grenzen gestossen und habe die Entwicklung der App mit Titanium eingestellt. Grund war: ich wollte etwas zweidimensionales auf einem Canvas zeichnen und hatte ausser der WebView keine Möglichkeit dazu. Die initiale Ladezeit einer WebView dauert etwas (auf meinem 3G ca. 3s). Wäre dem Anwender nicht zuzumuten.
Hallo *,
bin schon eine Weile mit Titanium unterwegs und da geht tatsächlich einiges, mehr als ich anfänglich dachte.
Was mich heute gerade stört ist die nicht vorhandene Canvas-Unterstützung. Hier http://familientagebuch.de/rainer/img/2011/dialektaufnahme.png versuche ich einem Aufnahmepegelmonitor (oben links). Dabei stopfe ich schmale Views in einen Container. Nach ca. 100 Takten wird es immer langsamer. Webview fange ich lieber nicht erst an. Muss wohl ein Plugin her. Trotzdem finde ich Tiatnium gut, wei es Standardaufgaben abnimmt und wesentlich zügiger als phonegap ist.
Gruß Rainer aus Hamburg