Почему PhoneGap кажется быстрее, чем Titanium? - PullRequest
3 голосов
/ 02 апреля 2012

Я пытаюсь измерить производительность нескольких кроссплатформенных решений, среди которых: 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 ]

7 голосов
/ 05 ноября 2012

Titanium не конвертирует код JavaScript в цель-c.Titanium просто использует javascript для моста target-c, чтобы взаимодействовать с iOS-инфраструктурой target-c (наиболее важными объектами пользовательского интерфейса).Более подходящее сравнение было бы для того, чтобы кодировать элемент пользовательского интерфейса титана (кнопка, метка, окно, вид), манипулировать ими и использовать кнопки html, css, image в phonegap.

Phonegap также использует собственный мост, и еслиВы знаете Java или Objective-C, вы можете сделать плагины для использования элементов собственного интерфейса пользователя и других нативных функций iOS или Android.

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

3 голосов
/ 03 апреля 2012

Это базовый JavaScript, и не весь JavaScript скомпилирован в нативный код. В основном, когда вы используете Titanium API, он будет конвертирован в Objective-C или Java-код. Но чтобы быть гибким и динамичным, есть JavaScript-интерпретатор, скомпилированный с приложением, который в основном работает на написанном вами JavaScript.

Это замедляет работу приложения. Но проверять это исключительно на этих вещах бесполезно. Если вы хотите выполнить полное тестирование, вам также нужно использовать Titanium API и сравнить его с PhoneGap.

Что вы заметите, так как Phonegap не компилируется в нативный код, он будет выглядеть по-другому, и визуально Titanium будет вести себя быстрее.

2 голосов
/ 03 апреля 2012

О, чувак, я не хочу начинать войну пламенем, но я положу свои два цента.Во-первых, полное раскрытие информации: я помогаю PhoneGap и никогда не использовал Titanium.Однако я отвечаю из 15-летнего опыта разработки.

Я никогда не находил инструменты, которые конвертируют код с одного языка на другой, особенно эффективными.Да, нативный код должен работать быстрее, чем код JavaScript, но я готов поспорить, что на этапе перевода есть неэффективность.

Опять же, это просто из прошлого опыта использования инструментов, которые компилируют один язык в другой, это не так.стук в Titanium, потому что это отличный фреймворк.

1 голос
/ 04 апреля 2012

В вашем коде TItanium ваша последняя строка создает объекты пользовательского интерфейса - это вызов Objective-C для создания UITableViewRow и объекта анимации, а затем добавление его в UITableView - вы выполняете 3 операции. Я был бы довольно уверен, что это то, что занимает время. Предпочтительный способ сделать это - создать массив титровальных объектов, а затем использовать setData для таблицы в конце.

PhoneGap уже создал UIWebView при загрузке приложения, и вы просто обновляете html в одном элементе DOM, поэтому я ожидаю, что пользовательский интерфейс будет быстрее.

...