【问题标题】:Why does PhoneGap seem faster than Titanium?为什么 PhoneGap 看起来比 Titanium 快?
【发布时间】:2012-04-16 07:53:31
【问题描述】:

我正在尝试衡量一些跨平台解决方案的执行性能,其中包括: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 倍!我不是性能测试方面的专家,但我设计的测试至少应该是非常准确的......

感谢您给我的任何提示。

【问题讨论】:

  • Titanium 和 PhoneGap 的用例明显不同。做这样的微基准测试完全没有抓住重点。
  • 我明白这一点,但我将在应用程序中放入的任何业务逻辑都将在纯 JavaScript 中完成。所以我正在测试在这些情况下运行纯 javascript 的速度。我知道人们会出于不同的原因使用 Titanium 和 PhoneGap,但我试图向自己说明 Titanium 执行速度更快的事实。

标签: iphone ios performance cordova titanium


【解决方案1】:

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

Phonegap 也使用它自己的桥接器,如果您了解 java 或 Objective-c,您可以制作插件来使用原生用户界面元素和 iOS 或 Android 的其他原生特性。

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

【讨论】:

    【解决方案2】:

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

    PhoneGap 已经在应用加载时创建了 UIWebView,而您只是在一个 DOM 元素中更新 html,所以我希望 UI 会更快。

    【讨论】:

    • 有趣的理论,但我不明白它是如何工作的。时间测量代码仅围绕循环,而不是 Ti.UI 代码。或者我的代码按顺序执行的假设也是错误的?在这种情况下,所有赌注都被取消。我刚刚对其进行了测试,通过在数组上将tableView.appendRow() 替换为Array.push() 并在最后执行tableView.setData()。没有加速。
    • 对不起 - 我的错。我以为你在主循环上运行测试。现在我看到你在主循环中运行循环并在那里进行测试。
    【解决方案3】:

    哦,伙计,我不想引发一场激烈的战争,但我会投入两分钱。首先,全面披露:我是 PhoneGap 的贡献者,我从未使用过 Titanium。不过,我是根据 15 年的开发经验来回答的。

    我从未发现将代码从一种语言转换为另一种语言的工具特别有效。是的,本机代码应该比 JavaScript 代码运行得更快,但我敢打赌在翻译阶段会引入低效率。

    这只是从过去使用将一种语言编译成另一种语言的工具的经验得出的,它并不是对 Titanium 的打击,因为它是一个很棒的框架。

    【讨论】:

      【解决方案4】:

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

      这会使应用程序变慢。但是纯粹在这些东西上测试它是没有用的。如果你想做一整套测试,你也需要使用 Titanium API,并将其与 PhoneGap 进行比较。

      您会注意到,由于 Phonegap 不会编译为本机代码,因此感觉会有所不同,并且在视觉上 Titanium 会表现得更快。

      【讨论】:

      • 我只是想感受一下纯 JavaScript 代码在 PhoneGap 和 Titanium 环境中的运行速度。其他差异(如 Native UI 和 Titanium API 暴露的其他区域)在这个级别上是无法比拟的,我同意。
      猜你喜欢
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2019-11-02
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多