2012-04-02 4 views
3

私はいくつかのクロスプラットフォームソリューションの実行パフォーマンスを測定しようとしています。その中には、TitaniumとPhoneGapがあります。だからここなぜPhoneGapはTitaniumより速く見えますか?

は自分のパフォーマンステスターのチタンバージョンの例です、それは非常に簡単ですが、私はちょうど私のコードが実行されますどのくらいの速感を取得しようとしている:

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のバージョンであります置き換えられる最後の2行を除いて同じ

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

両方ともiPhone 4Sで実行されます。私はエラーを排除するために、何度もテストを実行しました。

Titaniumのバージョンは、1回の再生で~0.0009ミリ秒、PhoneGapのバージョンでは1回の再生あたり~0.0002ミリ秒を測定できますか?

チタンは私のjavascriptコードをコンパイルするはずだから、もっと速くなると思っています。しかし、この場合は少なくとも4倍が遅いです!私はパフォーマンステストの専門家ではありませんが、私が設計したテストは、少なくとも遠隔的に正確でなければなりません。

ありがとうございました。

+0

チタンとPhoneGapの使用例は大きく異なります。このようなマイクロベンチマークを行うには、そのポイントを完全に逃すことです。 – ceejayoz

+0

私はそれを取得しますが、私がアプリケーションに入れるビジネスロジックは純粋なjavascriptで行われます。だから私はこれらの状況で純粋なjavascriptがどのくらい速く実行されているかをテストしています。いろいろな理由でTitaniumとPhoneGapを使用することを理解していますが、私はTitaniumがもっと速く実行するという事実を自分自身に説明しようとしていました。 – pancake

答えて

3

これは基本的なJavaScriptであり、すべてのJavaScriptがネイティブコードにコンパイルされているわけではありません。基本的には、Titanium APIを使用するとObjective-CまたはJavaコードに変換されます。しかし、柔軟でダイナミックになるためには、アプリケーションと一緒にコンパイルされたJavaScriptインタプリタがあります。これは基本的に、あなたが書いたJavaScriptを実行します。

これにより、アプリケーションの処理速度が低下します。しかし、純粋にこれらのことをテストすることは役に立たない。テストを完全に行うには、Titanium APIも使用する必要があります。それをPhoneGapと比較する必要があります。

Phonegapはネイティブコードにコンパイルされていないため、異なる感じがあり、視覚的にはTitaniumの動作が速くなります。

+0

私は、PhoneGapとTitanium環境で同じ純粋なjavascriptコードがどれくらい速く実行されたかを知ろうとしていました。その他の違い(ネイティブUIやTitanium APIによって公開される他の領域など)は、このレベルでは比類のないものです。 – pancake

2

ああ、私は火炎戦争を始めたいとは思わないが、私は2セントに入れる。まず、完全な開示:私はPhoneGapの投稿者です。私はTitaniumを一度も使用していません。しかし、私は15年間の開発経験から答えています。

コードをある言語から別の言語に変換するツールが特に効率的であることはありませんでした。はい、ネイティブコードはJavaScriptコードよりも速く実行する必要がありますが、翻訳フェーズで導入された非効率性があると確信しています。

これもまた、ある言語を別の言語にコンパイルするツールを使用した過去の経験から、それは素晴らしいフレームワークなので、Titaniumのノックではありません。

1

TITaniumコードでは、最後の行がUIオブジェクトを作成しています。これはObjective-Cを呼び出してUITableViewRowとアニメーションオブジェクトを作成し、それをUITableViewに追加しています。私はこれが時間を費やしていると確信しています。これを行うための好ましいTi方法は、titleオブジェクトの配列を作成し、最後にテーブルのsetDataを使用することです。

PhoneGapは既にアプリケーションの読み込み時にUIWebViewを作成しています.HTML要素内のHTMLを更新するだけなので、UIが高速になることが期待されます。

+0

興味深い理論ですが、どのように機能するのか分かりません。時間測定コードは 'Ti.UI'コードではなく、ループを囲むだけです。あるいは、私のコードが順番に実行されるという仮説もあるでしょうか?その場合、すべてのベットはオフになります。 私は、 'tableView.appendRow()'を配列の 'Array.push()'に置き換え、最後に 'tableView.setData()'を実行することで、それをテストしました。スピードアップはありません。 – pancake

+0

申し訳ありません - 私の悪い。私はあなたがメインループでテストを実行していると思った。今では、あなたがメインループ内でループを実行していて、そこでテストしているのが分かります。 –

7

チタンはjavascriptコードをobjective-cに変換しません。Titaniumはobjective-c iOSフレームワーク(最も重要なのはユーザインタフェースオブジェクト)と通信するためにjavascript to objective-cブリッジを使用するだけです。より適切な比較は、チタンのユーザインタフェース要素(ボタン、ラベル、ウィンドウ、ビュー)をコード化し、それらを操作し、phonegapのhtml、css、imageボタンを使用することです。

Phonegapも独自のブリッジを使用しています。もしjavaやobjective-cを知っていれば、ネイティブのUser Interface要素やiOSやAndroidの他のネイティブ機能を使うためのプラグインを作ることができます。

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

関連する問題