2012-04-02 9 views
3

Ich versuche, die Ausführungsleistung einiger plattformübergreifender Lösungen zu messen, darunter Titanium und PhoneGap.Warum scheint PhoneGap schneller als Titanium?

Also hier ist ein Beispiel für die Titanium-Version meiner Performance-Tester, ist es sehr einfach ist, aber ich versuche nur, ein Gefühl dafür, wie schnell mein Code zu erhalten ausgeführt wird:

var looplength; 
var start1; 
var start2; 
var end1; 
var end2; 
var duration1; 
var duration2; 
var diff; 
var diffpiter; 
var power; 
var info; 

for (power = 0; power < 24; power++) { 
    looplength = Math.pow(2, power); 

    start1 = new Date().getTime(); 
    for (iterator = 0; iterator < looplength; iterator++) {a=iterator;b=iterator;} 
    end1 = new Date().getTime(); 

    start2 = new Date().getTime(); 
    for (iterator = 0; iterator < looplength; iterator++) {a=iterator;} 
    end2 = new Date().getTime(); 

    duration1 = end1 - start1; 
    duration2 = end2 - start2; 
    diff  = duration1 - duration2; 
    diffpiter = diff/looplength; 

    info={title:'2^' + power + ' ' + diffpiter}; 
    tableView.appendRow(Ti.UI.createTableViewRow(info),{animated:true}); 
} 

Die PhoneGap-Version ist das gleiche mit Ausnahme der letzten zwei Zeilen, die ersetzt werden

document.write('2^' + power + ' ' + diffpiter + '<br />'); 

Beide werden auf einem iPhone 4S ausgeführt. Ich habe den Test mehrmals durchgeführt, um Fehler zu vermeiden.

Wie im Namen von all dem ist heilig kann die Titanium-Version ~0.0009 Millisekunden pro Iteration messen, während die PhoneGap-Version ~0.0002 Millisekunden pro Iteration misst?

Titanium soll meinen Javascript-Code kompilieren, also erwarte ich, dass es schneller ist. In diesem Fall ist es mindestens 4 mal langsamer! Ich bin kein Experte für Leistungstests, aber der Test, den ich entworfen habe, sollte mindestens im Entferntesten genau sein ...

Vielen Dank für alle Tipps, die Sie mir geben können.

+0

Titan und PhoneGap haben deutlich unterschiedliche Anwendungsfälle. Solche Mikrobenchmarks zu machen bedeutet, den Punkt völlig zu verfehlen. – ceejayoz

+0

Ich bekomme das, aber jede Geschäftslogik, die ich in die App einfügen würde in reinem Javascript getan werden. Also teste ich, wie schnell pures Javascript in diesen Situationen ausgeführt wird. Ich verstehe, dass man Titanium und PhoneGap aus verschiedenen Gründen verwenden würde, aber ich versuchte mir zu verdeutlichen, dass Titanium Dinge schneller ausführen würde. – pancake

Antwort

3

Dies ist grundlegende JavaScript, und nicht alle JavaScript wird in nativen Code kompiliert. Grundsätzlich, wenn Sie die Titanium-API verwenden, wird diese in Objective-C oder Java-Code konvertiert. Aber um flexibel und dynamisch zu sein, gibt es einen JavaScript-Interpreter, der mit der App kompiliert wird und im Prinzip das von Ihnen geschriebene JavaScript ausführt.

Dies macht die App langsamer. Aber rein auf diese Dinge zu testen ist nutzlos. Wenn Sie eine vollständige Testversion durchführen möchten, müssen Sie auch die Titanium-API verwenden und diese mit der von PhoneGap vergleichen.

Was Sie bemerken werden, da Phonegap nicht zu nativem Code kompiliert, wird es sich anders anfühlen, und optisch wird sich Titanium schneller verhalten.

+0

Ich habe gerade versucht, ein Gefühl dafür zu bekommen, wie schnell der gleiche pure JavaScript-Code in PhoneGap und in der Titanium-Umgebung lief. Die anderen Unterschiede (wie die Native UI und andere Bereiche, die von der Titanium API bereitgestellt werden) sind auf dieser Ebene unvergleichlich, da stimme ich zu. – pancake

2

Oh Mann, ich möchte keinen Flammenkrieg starten, aber ich werde meine zwei Cent reinlegen. Erstens, vollständige Offenlegung: Ich bin ein Beitrag zu PhoneGap und ich habe noch nie Titanium verwendet. Ich antworte jedoch auf 15 Jahre Entwicklungserfahrung.

Ich habe nie Werkzeuge gefunden, die Code von einer Sprache in eine andere konvertieren, um besonders effizient zu sein. Ja, nativer Code sollte schneller als JavaScript-Code laufen, aber ich wette, dass es während der Übersetzungsphase zu Ineffizienzen kommt.

Auch dies ist nur aus der Vergangenheit Erfahrung mit Tools, die eine Sprache in eine andere kompilieren, es ist kein Schlag auf Titan, wie das ist ein großartiger Rahmen.

1

In Ihrem TItanium-Code erstellt Ihre letzte Zeile UI-Objekte - dies ist ein Aufruf von Objective-C, um ein UITableViewRow und ein Animationsobjekt zu erstellen und dann an ein UITableView anzuhängen - Sie machen 3 Operationen. Ich bin ziemlich zuversichtlich, dass sich das die Zeit nimmt. Der bevorzugte Weg, dies zu tun, wäre, ein Array von Titelobjekten zu erstellen, und dann setData in der Tabelle am Ende zu verwenden.

PhoneGap hat das UIWebView bereits beim Laden der App erstellt und Sie aktualisieren lediglich das HTML in einem DOM-Element, so dass die Benutzeroberfläche schneller sein wird.

+0

Interessante Theorie, aber ich verstehe nicht, wie es funktionieren könnte. Der Zeitmesscode umgibt nur die Schleife, nicht den "Ti.UI" -Code. Oder ist die Annahme, dass mein Code ausgeführt wird, um auch ein falscher? In diesem Fall sind ALLE Wetten deaktiviert. Ich habe es gerade getestet, indem ich 'tableView.appendRow()' durch 'Array.push()' in einem Array ersetzt habe und am Ende ein 'tableView.setData()' gemacht habe. Keine Beschleunigung. – pancake

+0

Entschuldigung - mein Schlechter. Ich dachte, du würdest den Test auf der Hauptschleife machen. Jetzt sehe ich, dass Sie Schleifen innerhalb der Hauptschleife laufen lassen und dort testen. –

7

Titanium konvertiert Javascript nicht in objective-c.Titanium verwendet einfach ein Javascript zur Ziel-C-Brücke, um mit dem Objective-C-iOS-Framework zu kommunizieren (am wichtigsten sind User-Interface-Objekte). Ein geeigneterer Vergleich wäre, das Benutzeroberflächenelement von Titan (Schaltfläche, Label, Fenster, Ansicht) zu codieren, sie zu manipulieren und html, css, Bildschaltflächen in phonegap zu verwenden.

Phonegap verwendet auch eine eigene Brücke und wenn Sie Java oder objective-c kennen, können Sie Plugins verwenden, um native Benutzeroberflächenelemente und andere native Funktionen von iOS oder Android zu verwenden.

http://zsprawl.com/iOS/2012/05/navigation-bar-with-nativecontrols-in-cordova/

Verwandte Themen