2012-04-02 40 views
3

我試圖來衡量的一些跨平臺的解決方案,其中有執行性能比較:鈦和PhoneGap的。爲什麼PhoneGap看起來比鈦更快?

因此,這裏是我的性能測試儀的鈦金版爲例,它是非常簡單的,但我只是想多快我的代碼的感覺被執行:

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}); 
} 

的PhoneGap的版本除了最後兩條線被取代之外,其他條件相同

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

兩者都在iPhone 4S上執行。我已經多次運行測試,以消除錯誤。

在所有的名字怎麼是神聖可以在二版措施每次迭代~0.0009微秒,而PhoneGap的版本措施,每次迭代~0.0002毫秒?

鈦應該編譯我的javascript代碼,所以我希望它會更快。在這種情況下,然而它至少4倍慢!我不是性能測試方面的專家,但我設計的測試應該至少遠程準確...

謝謝你提供給我的任何提示。

+0

鈦和PhoneGap有明顯不同的用例。做這樣的微基準是完全錯過了這一點。 – ceejayoz 2012-04-02 20:16:29

+0

我明白了,但是我將放入應用程序的任何業務邏輯都將在純JavaScript中完成。所以我測試了在這些情況下純JavaScript運行的速度。我明白,出於不同的原因,我們會使用Titanium和PhoneGap,但我試圖向我自己說明Titanium會更快執行的事實。 – pancake 2012-04-03 07:47:01

回答

3

這是基本的JavaScript,而不是所有的JavaScript編譯爲本地代碼。基本上,當您使用Titanium API時,它將轉換爲Objective-C或Java代碼。但爲了靈活和動態,應用程序會編譯一個JavaScript解釋器,並基本運行您編寫的JavaScript。

這使得應用程序變慢。但純粹對這些東西進行測試是沒有用的。如果你想做一個完整的測試,你也需要使用Titanium API,並將其與PhoneGap進行比較。

你會注意到,因爲Phonegap不能編譯爲本機代碼,它會感覺不同,而且視覺上Titanium的表現會更快。

+0

我只是想了解在PhoneGap和Titanium環境中運行相同的純JavaScript代碼的速度。我同意,其他差異(如Native UI和Titanium API公開的其他區域)在這個級別上是無法比擬的。 – pancake 2012-04-03 07:49:38

2

哦,男人,我不想開始一場火焰戰爭,但我會投入我的兩分錢。首先,充分披露:我是PhoneGap的貢獻者,我從未使用Titanium。但是我從15年的開發經驗中回答。

我從來沒有找到能夠將代碼從一種語言轉換爲另一種語言的工具,效率特別高。是的,本機代碼運行速度應該比JavaScript代碼快,但我敢打賭,在翻譯階段引入了低效率。

再次,這只是從過去使用編譯一種語言到另一種語言的工具的經驗來看,它不是鈦的敲門磚,因爲這是一個偉大的框架。

1

在您的TItanium代碼中,最後一行是創建UI對象 - 這是調用Objective-C創建UITableViewRow和動畫對象,然後將其附加到UITableView - 您正在執行3個操作。我相當確信這是花時間。首選的Ti方法是創建一個標題對象數組,然後在表格末尾使用setData。

PhoneGap已經在應用程序加載時創建了UIWebView,並且您只是更新了一個DOM元素中的html,所以我期望UI會更快。

+0

有趣的理論,但我不明白它是如何工作的。時間測量代碼只包含循環,而不是'Ti.UI'代碼。或者是我的代碼被執行的假設也是錯誤的?在這種情況下,所有投注都關閉。 我剛剛對它進行了測試,將'tableView.appendRow()'替換爲數組上的'Array.push()',並在末尾執行'tableView.setData()'。沒有加速。 – pancake 2012-04-04 07:07:21

+0

對不起 - 我的壞。我以爲你在主循環上運行測試。現在我看到你在主循環內運行循環並在那裏測試。 – 2012-04-11 01:14:29

7

鈦不javascript代碼轉換成Objective-C的。Titanium簡單地使用一個JavaScript到Objective-C橋與Objective-C iOS框架(最重要的是用戶界面對象)進行通信。更適當的比較是編寫鈦的用戶界面元素(按鈕,標籤,窗口,視圖),操作它們並在手機中使用html,css和圖像按鈕。

Phonegap還使用它自己的橋樑,如果您瞭解java或objective-c,則可以使插件使用本機用戶界面元素以及iOS或Android的其他本機功能。

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

相關問題