我正在尝试衡量一些跨平台解决方案的执行性能,其中包括: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次更慢!我不是性能测试方面的专家,但我设计的测试应该至少是远程准确的......
感谢您提供的任何建议。
答案 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会更快。