为什么PhoneGap看起来比Titanium更快?
我试图衡量一些跨平台解决scheme的执行性能,其中包括:Titanium和PhoneGap。
所以这里是我的性能testing器的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上执行。 我已经多次运行testing,以消除错误。
Titanium版本如何以每个迭代~0.0009
毫秒的速度进行测量,而PhoneGap版本每次迭代测量的时间~0.0002
毫秒?
titanium应该编译我的JavaScript代码,所以我期望它更快。 但在这种情况下,它至less要慢4倍 ! 我不是性能testing方面的专家,但是我devise的testing应该至less远程精确。
感谢您提供给我的任何提示。
这是基本的JavaScript,并不是所有的JavaScript都被编译为本地代码。 基本上,当您使用Titanium API时,将被转换为Objective-C或Java代码。 但是为了灵活和dynamic,还有一个与应用程序一起编译的JavaScript解释器,它基本上运行你写的JavaScript。
这使得应用程序变慢。 但纯粹在这些东西上testing是没用的。 如果你想做一个完整的testing,你也需要使用Titanium API,并将其与PhoneGap进行比较。
你会发现,由于Phonegap不能编译为本地代码,它会感觉不一样,而且Titanium的performance会更快。
Titanium不会将javascript代码转换为objective-c。 titanium只是使用一个JavaScript的Objective-C桥梁与Objective-C iOS框架(最重要的是用户界面对象)沟通。 更适当的比较将是编写titanium的用户界面元素(button,标签,窗口,视图),操纵它们,并在手机中使用HTML,CSS,图像button。
Phonegap也使用它自己的桥梁,如果你知道Java或Objective-C,你可以使插件使用本机用户界面元素和iOS或Android的其他原生function。
http://zsprawl.com/iOS/2012/05/navigation-bar-with-nativecontrols-in-cordova/
哦,伙计,我不想开始一场火焰战争,但我会投入我的两分钱。 首先,充分披露:我是PhoneGap的贡献者,我从未使用过Titanium。 不过,我从15年的发展经验回答。
我从来没有find能够将代码从一种语言转换到另一种语言的工具,效率特别高。 是的,本机代码的运行速度应该比JavaScript代码快,但是我敢打赌,在翻译阶段引入了低效率。
再次,这只是从以往使用编译一种语言到另一种语言的工具的经验,这不是titanium的敲门砖,因为这是一个伟大的框架。
在你的TItanium代码中,最后一行是创buildUI对象 – 这是调用Objective-C来创build一个UITableViewRow和一个animation对象,然后将它附加到一个UITableView – 你正在做3个操作。 我相当确信这是花时间。 这样做的首选Ti方法将创build一个标题对象的数组,然后在表的结尾处使用setData。
PhoneGap已经创build了应用程序加载的UIWebView,你只是更新一个DOM元素的HTML,所以我希望用户界面会更快。