В любом случае, что такое нативное приложение?
«Я не буду сегодня попытки далее определить виды материала я понимаю охваченными в этом описании сокращенном„злостная порнография“; и, возможно, мне никогда не удастся сделать это вразумительно. Но я знаю это, когда вижу это »
Судья Поттер Стюарт, Верховный суд США, Джейкобеллис против Огайо
В последнее время много спорят об относительных достоинствах нативных, веб-приложений и так называемых «гибридных» приложений, в которых используются веб-технологии и технологии, такие как PhoneGap, для создания приложений, которые могут быть установлены на платформах, таких как iOS, «как родные приложения».
Все это оставляет без ответа безобидный на первый взгляд вопрос. Что такое нативное приложение? И что именно отличает его от гибридного приложения? Возможно, мы могли бы ответить, как судья Поттер лихо сделал в отношении порнографии, что мы знаем, родное приложение, когда мы видим один.
Но кроме этого, какие эмпирические правила существуют?
Смотри и чувствуй
Такие люди, как Джон Грубер, невероятно широко читаемый специалист по технологиям Apple, предполагают, что нативные приложения по своей природе более привлекательны . Какие логические приложения, использующие собственный интерфейс, являются собственными. Так, где это оставляет очень много игр, например, Angry Birds, без видимого контроля. Это родной? Кто бы сказал, что это не так.
И если приложение, созданное с использованием веб-технологий, «обманывает» пользователя, заставляя его поверить в то, что список, с которым он взаимодействует, является «собственным» объектом списка, таким как приложение NetFlix для iOS и многими другими, почему он менее естественный?
Производительность
Родные приложения, написанные на «настоящих» языках программирования, таких как Objective-C, означают, что такие приложения имеют лучшую производительность, что, конечно, всегда имеет значение. За исключением случаев, когда это не так.
Вы можете написать ужасно неэффективный код на любом языке программирования (я занимаюсь этим уже 25 лет!), И в целом верно, что скомпилированные языки, такие как Objective-C, дают лучшую производительность, чем интерпретируемые языки, при прочих равных условиях. Но хотя в целом это правда, это не всегда актуально. На самом деле, это не всегда полностью верно.
Производительность имеет значение только тогда, когда она имеет значение, то есть более высокая производительность имеет значение только тогда, когда она влияет на пользователя, а не в абсолютном выражении. В приложениях с интенсивной графикой, таких как игры, производительность, конечно, имеет большое значение. Заикание, игры с низкой частотой кадров в секунду вряд ли будут успешными. Но даже здесь это не так ясно. На iOS CSS-анимации и переходы аппаратно ускоряются. Без усилий разработчик может передать задачу анимации графическому процессору, поэтому производительность кода JavaScript может практически не повлиять на общую производительность приложения.
По мере того как WebGL становится мобильным, преимущество компилируемых языков в производительности становится еще менее актуальным. Многие из самых успешных игр для iOS пишутся с использованием Lua , поверх движка рендеринга OpenGL 3D. Благодаря WebGL в мобильных браузерах игры JavaScripted WebGL, по всей вероятности, будут соответствовать производительности современных нативных игр, даже без таких усовершенствований, как движки JIT JavaScript, которые уже есть в Mobile Safari, а также в браузерах Playbook и Blackberry.
Не совсем ясно, что за пределами приложений, интенсивно использующих графику, производительность действительно так важна, когда речь идет о приложениях, созданных с использованием веб-технологий. Несомненно, это ограничение широко рекламируется, но доказательств такого сильного убеждения на местах очень мало. По общему признанию, производительность CSS переходов и анимации в Android довольно ужасна.
Как и внешний вид, производительность — в глазах зрителя. Если пользователь не замечает, это проблема?
Mind the Gap
Итак, если производительность во многих случаях не совсем та проблема, с которой она связана, а нативный внешний вид — это немного красной селедки, что еще может сделать что-то нативное? Очевидно, что есть некоторые аспекты нативного приложения, которых нет в приложениях, запущенных в браузере.
-
Нативные приложения могут работать в автономном режиме.
Хм, подождите, так что приложения на основе веб-технологий могут работать на большинстве платформ.
-
Нативные приложения могут быть установлены на устройстве.
Фактически, то же самое можно сделать с веб-приложениями на iOS и других мобильных платформах, причем с меньшими усилиями, чем нативные приложения; нет необходимости заходить в магазин приложений, пользователь может сделать это из приложения.
-
Нативные приложения получают доступ ко всем вкусностям устройства, таким как камера, акселерометр и так далее.
Теперь это явное, хотя и уменьшающееся преимущество. Прямо сейчас вы не можете получить доступ ко многим API устройств прямо из браузера. Например, если вам нужен доступ к камере или адресной книге на iOS, вам нужно выйти за пределы браузера. Это так, пока.
Однако вы можете использовать PhoneGap , Appcelerator , Rhomobile и другие подобные решения, разработать свое приложение с использованием HTML, CSS и JavaScript и получить доступ к этим базовым API-интерфейсам в JavaScript через DOM.
И с появлением стандарта DAP от W3C (который предоставляет доступ к большому количеству API устройств стандартным способом, и уже частично реализован Android 3.0, где браузер может получить доступ к камере устройства через API DOM), а также Широко распространенная поддержка геолокации и возрастающая поддержка акселерометров в браузере, день доступа ко многим API этих устройств в браузере не за горами.
Слон в комнате
Итак, что мне не хватает? Ах, слон в гостиной, магазины приложений. Чтобы попасть в Apple App Store, множество магазинов приложений для Android и т. Д., Вам нужно упаковать приложение, созданное с помощью веб-технологий. К сожалению, вы не можете просто предоставить им URL, даже приложения, созданные для магазина веб-приложений Chrome, должны быть упакованы.
Вопрос о том, является ли это преимуществом, остается спорным, а не просто отличительной чертой (или это ошибка?) Нативных приложений, но даже при этом 100% логики и представления вашего приложения могут быть построены с помощью сети технологии, упакованные, скажем, с PhoneGap, и развернутые в магазинах приложений.
Гибрид не Sequitur
Итак, во всем этом, что делает приложение гибридным? Почему приложения, созданные с использованием веб-технологий и упакованные с использованием, скажем, PhoneGap, менее естественны, чем игра, созданная с использованием Unity3D ? Или в этом отношении, чем приложение, созданное с CocoaTouch и Objective-C? А в WebOS, где HTML, CSS и JavaScript являются родными языками разработки, нативные приложения почти все разрабатываются с использованием веб-технологий.
Прежде всего, заботятся ли пользователи? Я сомневаюсь в этом, как немногие, если таковые имеются, могут сказать. Если это работает хорошо, и выглядит хорошо, они будут использовать это, и если нет, они не будут. Пользователям наплевать, то же самое отношение к большинству платформ десятилетиями.
Есть веб-приложения и есть нативные приложения. Там нет такого понятия, как гибридные приложения. Бог знает, откуда появился мем, но пришло время удалить его. Используйте любые технологии, которые вы хотите, или удобны для создания отличных приложений для ваших пользователей.