为什么PhoneGap似乎比Titanium更快?

时间:2012-04-02 16:25:38

标签: iphone ios performance cordova titanium

我正在尝试衡量一些跨平台解决方案的执行性能,其中包括:Titanium和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版本是相同的,除了最后两行被替换

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

两者都在iPhone 4S上执行。我已经多次运行测试,以消除错误。

如果所有神圣的名称,Titanium版本每次迭代测量~0.0009毫秒,而PhoneGap版本每次迭代测量~0.0002毫秒?

Titanium应该编译我的javascript代码,所以我希望它更快。在这种情况下,它至少 4次更慢!我不是性能测试方面的专家,但我设计的测试应该至少是远程准确的......

感谢您提供的任何建议。

4 个答案:

答案 0 :(得分:7)

Titanium不会将javascript代码转换为objective-c。 Titanium只是使用javascript to objective-c桥接来与objective-c iOS框架(最重要的是用户界面对象)进行通信。更合适的比较是编码钛的用户界面元素(按钮,标签,窗口,视图),操纵它们并在phonegap中使用html,css,图像按钮。

Phonegap也使用它自己的桥梁,如果你知道java或objective-c,你可以使用插件来使用本机用户界面元素和iOS或Android的其他Native功能。

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

答案 1 :(得分:3)

这是基本的JavaScript,并非所有JavaScript都编译为本机代码。基本上,当您使用Titanium API时,它将转换为Objective-C或Java代码。但是为了灵活和动态,有一个用App编译的JavaScript解释器,它基本上运行你编写的JavaScript。

这使得应用程序变慢。但纯粹根据这些东西进行测试是没用的。如果您想进行全套测试,您还需要使用Titanium API,并将其与PhoneGap进行比较。

你会注意到,因为Phonegap没有编译为本机代码,它会感觉不同,并且可视化Titanium的行为会更快。

答案 2 :(得分:2)

哦,伙计,我不想开始一场火焰战,但我会投入两分钱。首先,完全披露:我是PhoneGap的贡献者,我从未使用过Titanium。不过,我正在回答15年的开发经验。

我从来没有找到将代码从一种语言转换为另一种语言的工具,效率特别高。是的,本机代码应该比JavaScript代码运行得更快,但我愿意打赌在翻译阶段引入的效率低下。

同样,这只是过去使用将一种语言编译成另一种语言的工具的经验,这不是对Titanium的打击,因为这是一个很好的框架。

答案 3 :(得分:1)

在您的TItanium代码中,您的最后一行是创建UI对象 - 这是调用Objective-C创建UITableViewRow和动画对象,然后将其附加到UITableView - 您正在进行3次操作。我非常有信心这就是花时间。这样做的首选方法是创建一个标题对象数组,然后在最后的表格中使用setData。

PhoneGap已经在app load上创建了UIWebView,你只是在一个DOM元素中更新html,所以我希望UI会更快。