Можно ли использовать загрузчик AMD, например RequireJS, с помощью приложения PhoneGap/Cordova?

Мы все знаем преимущества использования RequireJS. Мне интересно, но стоит ли учитывать соображения производительности при разработке приложения Кордовы (особенно на платформе Android 2.x, которая может быть медленной собакой). Скажем, я пишу SPA и динамически загружаю модуль при навигации к новому представлению - не будут ли проблемы с задержкой, даже если я загружаюсь из файловой системы? В отличие от загрузки всех моих ресурсов JavaScript, когда приложение изначально загружается?

Да, я знаю, что смогу проверить себя - мне просто интересно, кто-нибудь там уже протестировал производительность!

Ответ 1

Если вы используете r.js, чтобы хотя бы объединить (если не оптимизировать, что может быть сомнительным преимуществом для некоторых, когда все активы являются локальными) ваши модули, вы не будете загружать из файловой системы, отличной от начальной загрузки вашего приложения. Используя плагины-загрузчики, такие как "текст" и т.д., Даже ваши ресурсы HTML/шаблона могут быть объединены в модули в вашем конкатенированном файле, так что загрузка шаблона - это просто "перфоманс" вызова функции. Чтобы обратиться в @Gajotres point, вы можете либо заказать теги script, либо сначала включить Кордову, либо прошить ее с помощью require.config, если вы требуете .js 2.1. 0 (я считаю) или лучше. Итак - в двух словах, если вы используете require.js для гибридного мобильного устройства, НЕ пропустите шаг конкатенации. Предполагая, что вы объединили свои модули в "встроенный" js файл, в этот момент производительность будет зависеть как от факторов, находящихся за пределами вашего контроля (устройство, встроенная реализация веб-просмотра и т.д.), Так и другие факторы, которые вы можете контролировать... такие вещи, как

  • какая сложная сложность приложения? Если это статические представления, то отображение/скрытие уже присутствующих элементов DOM будет быстрее, чем требуется модуль, который требует модуль шаблона и отображает шаблон с использованием любого механизма шаблонов и т.д.
  • Предполагая, что это не статические представления, глубоко вложенные структуры DOM (например,) могут дать вам горе на производительность, оплату и т.д.

В целом, у Эндрю Триса есть замечательная статья по соображениям UX для мобильных устройств: http://www.tricedesigns.com/2013/03/11/performance-ux-considerations-for-successful-phonegap-apps/

Если приложение не очень сложное, тогда может быть достаточно простого шага сборки, который объединяет ваши ручные модули (так что вы получите преимущество более низких когнитивных издержек при разработке, плюс вывод сборки одного файла). Но если вы не конкатенируете шаблоны тоже (в формате, доступном для модуля js), вам придется загрузить их в какой-то момент...

Ответ 2

Позвольте мне рассказать вам по моему опыту.

Хотя require.js является отличным инструментом, есть проблемы с задержкой при использовании с Phonegap, в основном на более медленных устройствах. Это может быть даже очень раздражает. Конечно, всегда есть обходные пути, но зачем использовать require.js, если вам нужно обходное решение, чтобы заставить его работать правильно.

Есть даже некоторые проблемы при загрузке некоторых старых версий файла cordova.js, поэтому единственный способ исправить это - загрузить его обычным способом с помощью классического тега script и до require.js:

<script type="text/javascript" src="libs/cordova-2.1.0.js"></script>
<script data-main="js/main" src="libs/require-jquery.js"></script> 

Некоторые фреймворки при использовании с require.js и Phonegap/Cordova вызовут такие проблемы, как jQuery Mobile. В основном все, что нужно для работы с DOM как можно скорее, вызовет проблемы. Опять же есть некоторые обходные пути, но в чем смысл.

В конце с некоторыми играми и исправлениями вы можете повысить видимость, но DON'T ожидают увеличения рабочей среды рабочего стола.

EDIT:

Реальные проблемы начались вокруг Кордовы 2.1.0, когда Кордова ленивая загрузка начала противоречить Требованию .js, она даже зашла так далеко, что обе структуры определили и нуждаются в функциях, которые столкнулись друг с другом. И была проблема RequireJS, не ожидающая события deviceready, которое вызвало проблемы с некоторыми другими структурами.

В настоящее время все проблемы фиксированы как с версией Кордовы 2.7.0. но я не могу гарантировать, что какая-то другая проблема захочет выйти.

Давайте поговорим и о других проблемах. В настоящее время вы беспокоитесь о том, что Require.js вызовет проблемы с исполнением с помощью Phonegap. Даже если это правда в текущей версии Corodva, это не большая проблема.

Вам нужно беспокоиться о том, какие рамки вы собираетесь использовать для создания своего гибридного приложения. В настоящее время идеальных фреймворков не существует, даже если вы создаете чистую javascript-приложение, вы все равно не сможете создать приложение "родной внешний вид". Даже последнее поколение мобильных телефонов просто замедляет предоставление вам богатого пользовательского интерфейса с привычным поведением приложений.

Из моего опыта есть только 3 доступных способа создания практически хорошего приложения при работе с гибридным приложением:

  • Сенча прикосновение
  • Ex jqMoby (теперь Intel AppFramework)
  • Чистое приложение для javascript

Require.js, curl.js или любая подобная структура просто не помогут вам здесь.

Последнее, обратите особое внимание на ifandelse answer, в то время как немного от темы (например, моя часть EDIT), она намного больше важность, а затем Require.js совместимость с Phonegap.