Расскажу как я решил погрузиться в мобильную разработку. Какую поставил цель, какие ресурсы выделил для её достижения, с какими трудностями столкнулся и как решил возникшие проблемы. Также будет немного аналитики, размышлений о карьере программиста и личного опыта при взаимодействии с рекрутерами.


Итак, я решил погрузиться в мобайл. Что же толкнуло меня на эту скользкую дорожку? Это пагубное желание возникло еще летом 2014 года. Тогда я получил возможность поучаствовать в Tolstoy Startup Camp Яндекса.

На тот момент я был фуллстек разрабом с упором в Microsoft веб и десктоп технологии (C#, WPF, ASP.NET, Sharepoint, Silverlight, WCF, MSSQL). Но исследовав тему стартапов, решил, что веб и тем более десктоп продукты отстой, а рулят мобаппы и поэтому надо научиться делать их.

Начал выбирать стек для разработки. Основных кандидатов было три:

  1. Android приложения на Java с Android Studio от Google.

  2. iOS приложения на Objective-C с XCode от Apple.

  3. Android/iOS приложения на C# с плагином к MS Visual Studio от Xamarin.

Самым логичным выбором с учетом моего опыта в C# был Xamarin. Но мы как раз недавно сделали финнам большую ERP-систему для деревообработки на MS Silverlight на которую потратили 24 месяца разработки. Как только проект закончился, пришла новость от Microsoft, что они решили убить Silverlight и систему можно выкинуть на помойку. Я решил, что MS слишком уж легко кидает своих разработчиков. И я не готов нести риски и вкладывать ресурсы в технологию, которую MS тоже убьет, как только ее выпнут с очень конкурентного мобильного рынка.

Следующим кандидатом на вылет стал Objective-C. Да, юзеры Айфонов охотнее платят и делать iOS мобаппы выгоднее, чем Android. Но я как раз купил себе новый смартфон на Android и HP-ноут на Windows 7. А для разработки под iOS нужно было купить IPhone и ноут на macOS. А лицензия для выкладки мобаппов в стор для Apple стоила 99$ / год, а для Google 25$ единоразово. Я решил, что для теста затраты на разработку под iOS слишком высоки.

Почему iOS приложения генерируют больше прибыли, чем Android

В итоге я остановился на Java с Android Studio. Почитал документацию, сделал пару простых приложений. Но серьезно погружаться в тему не стал. Активность изучения довольно быстро сошла на нет по двум причинам.

Во-первых, было тяжело после основной работы по вечерам будней и выходным уделять время на саморазвитие. Очень быстро падает мотивация без поставленной цели и пинкам снаружи. Если бы в компании, где я тогда работал, были бы проекты для мобилок и я бы попал в команды, которые этим занимаются, то шансы бы были. Но без этого на чистом энтузиазме в течение месяца обучение прекратилось само собой.

Во-вторых, фантастически медленная отладка кода под AVD Manager на виртуальном устройстве или на реальном смартфоне. После любого изменения приходилось по 3-10 минут ждать, чтобы проект пересобрался и заново страртовал под AVD. Реально, почувствовал себя программистом 60-х годов с перфокартами, которые по пол дня набивали текст программы, потом пол дня ждали запуска и по вечерам читали логи, что пошло не так.

Добило ситуацию то, что эмулятор постоянно делал прозрачные намеки и писал в консоли: “HAXM Installation Failed. Install Intel HAXM in Windows”. То бишь, внезапно оказалось, что для разработки на Android нужен эмулятор AVD. Для комфортной работы AVD нужен HAXM (движок хардверного ускорения виртуализации). Для HAXM нужен процессор Intel на компьютере и желательно не OS Windows 7. А у меня была как раз она и AMD A10-4600M процессор в придачу. И даже 12GB RAM процессу сильно не помогли. До сих пор проблема с низким быстродействием разработки под Android “не с Intel процессором” не решена.

После неудачи снова вернулся к началу и проанализировал роадмап для каждой технологии - что нужно знать, чтобы освоить ее.

Роадмап для Android-разработчика
Роадмап для iOS-разработчика
За и против Xamarin в мобильной разработке

Решил попробовать Xamarin. Но те же проблемы. Писать код довольно комфортно в студии. Но запускать-то его все равно пришлось через AVD, который медленный и глючный.

На этом опыты с мобилками были закончены. Но примерно два года назад мне посоветовали вместо Xamarin посмотреть Mobile Blazor Bindings от Microsoft. На новом компьютере с процессором Intel Android Emulator запускался довольно шустро. Знакомый язык C#, понятная Razor-верстка. Прочитал спеку, сделал все тестовые приложения, но как-то тоже не зашло. Ощущения какой-то поделки вместо нормального продукта. Плохая спека, постоянные ошибки в консоли и непонятно у кого спрашивать совета. Как я понял Microsoft поставили крест на этом эксперименте.

Итак, последняя (last but not least) из попыток научиться мобильной разработке. Пару месяцев назад менял работу. Среди прочих собеседовался на позицию “Angular Front Dev” с компанией на удаленку в США, которая занимается ментальным здоровьем. Ну, там, позитивный интеллект, ментальный фитнес, твой разум друг или враг, “Делай добро и оно к тебе вернётся. Делаешь зло и оно будет преследовать тебя.” и прочее в том же духе. Довольно актуальная тема, мозги у народа давно набекрень со всей этой пандемией, QR-кодами, домашним карантином и спорами ативаксеров.

Я им понравился, они сразу готовы были сделать оффер, но что-то меня в них смущало. В первую очередь то, что я не знал стек, на котором написан их продукт: Ionic+PWA. С Ionic они раскатывали свою версию моб аппа на iOS, Android и Web платформы. Второе - я поговорил только с их CTO (Джеймсом из Лондона) и продактом (Иннокентием из Москвы, ex-iOS front на этом же проекте). А техническое собеседование, хотя бы проверить знания Angular, они посчитали излишним. Т.к. по их словам, “у них абсолютный гений на бэкенде, он поможет по любым вопросам, да и по твоему резюме мы видим, что справишься”.

Я все же настоял еще на одной встрече с технической командой. На звонке был бэкенд-гений Айдар, который сразу сказал, что фронтовые технологии он не знает и поэтому говорить не о чем. По ходу встречи я раскопал, что у них большие проблемы с кодом. Они наняли индусов переписать приложение с нэйтив iOS/Android на Ionic. У индусов на первой встрече был крутой архитектор, который сказал, что все будет ОК. А в дальнейшем на проекте вместо него работали 3-4 индуса. Которые не знали Ionic, Angular, RxJS, Typescript и обучались в процессе работы. А по ходу дела наворотили говнокода с копипастом, утечками памяти из-за забытых отписок, вермишели из HTML-верстки и фронтового кода внутри HTML прямо в теге script, встроенных CSS-стилей в HTML, писали на Javascript вместо Typescript (без выделенных классов, а с анонимными типами any {...} и var вместо let и const). По сути им был нужен Фронтенд Лид, который знает, как правильно писать фронт, выгонит индусов, перепишет за них код и будет в дальнейшем сопровождать проект, нанимать фронтовиков и верстальщиков, следить за чистотой кода и внедрять последние новации.

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

Через пару дней я решил заняться Ionic. Слишком уж они хорошо расписывали, как им удобно писать код один раз и раскатывать его без усилий на три платформы. Если кратко, это работает так.

Схема работы Ionic

Пишешь обычное веб-приложение на HTML, CSS, JavaScript (Typescript). А еще лучше поверх них на Angular, React или Vue. С помощью библиотеки Capacitor (или его аналога, предка и вдохновителя Apache Cordova) трансформируешь код в нативные приложения под iOS, Android, Windows. И твое приложение выполняется внутри компонента WebView (окно веб-браузера). А обращение к фичам устройства (камера и др) происходит с помощью плагинов.

И решил инвестировать в изучение этого чуть больше времени. Поэтому из полученных офферов выбрал тот, где смог договориться на удаленку на 4 дня в неделю за 80% зарплаты. Один день в неделю, вечера будней и часть выходных изучал Ionic.

В целом, это сработало. Появилось свободное время по вечерам и смог довести исследование до получения значимого результата. Вел статистику: с 22.11.21 до 31.12.21 тратил от 0 до 3.5 ч в день. Всего потратил 42 ч за 42 дня. По итогу изучил Ionic и сопутствующие библиотеки, написал приложение под Android с типовыми контролами, базовой функциональностью фотогалереи (учебный пример из спеки Ionic - сделать фотку со смарта, сохранить ее в телефоне, загрузить из памяти и удалить ее). Также сделал получение данных через публичное веб-апи (факты о кошках) и использовал популярные плагины (кроме фич для фотогалереи: Camera, Filesystem, Storage встроил кнопки для вызова плагинов Motion, Haptics и Device).

Код проекта выложил на Гитхаб. Ниже прикладываю скрины. Также создал PWA из приложения, как написано тут и задеплоил сюда через Firebase (Backend as a Service).

Скрины приложения

Прочитал статьи с обсуждением Ionic. Выписал плюсы и минусы:

1. Плюсы и минусы разработки приложений на Ionic, октябрь 2018

Плюсы: быстрая разработка, дебаг в браузере, знакомый стек веба, много компонент, есть плагины, пара минут сборка и деплоится на телефон, сборка под iOS/Android

Минусы: плагины глючные, быстродействие приложения медленнее нэйтива, билд ломается и надо очищать и пересобирать поэтому лучше делать мелкие коммиты

2. Ionic: комментарии к мифам после года использования, май 2016

Плюсы: для простых аппов MVP подходит, для сложных нет, но мне и нужно MVP, есть проект Crosswalk (уже сдох) ускоряет мобапп для старых андроидов в 10 раз, но раздувает билд с 5 до 41Мб, Genymotion - быстрый Android эмулятор, построенный на основе VirtualBox, пишешь один раз а работает везде, экономит время и деньги

Минусы: гибридные приложения медленнее нативных

3. Лучшие фреймворки для разработки кроссплатформенных мобильных приложений, август 2020

Что советуют выбрать:

React Native, если вам нужна поддержка зрелого сообщества, разработка на JavaScript и проверенное временем решение.

Flutter, если вы знакомы с Dart и хотите добиться высокой производительности.

Ionic, если вам нужно ускорить цикл разработки и тестирования вашего приложения за счет полной кроссплатформенной адаптации.

Xamarin идеальное решение для тех, кто хочет писать на C#, получить хорошую производительность и испытать преимущества нативных инструментов.

NativeScript для 100% нативных API-интерфейсов, которые предоставляются как часть набора инструментов.

Для Ionic критичных багов нет - низкая производительность, плохо тестить нейтив функции, зато быстрая веб разработка. Хвалят Xamarin и Flutter.

4. Топ-10 Android-фреймворков: обзор и сравнение, август 2020

Flutter (39% моб разрабов 14.6 млн?, 134к звезд на Гитхаб), Ionic (5+ млн, 46к), React Native (42% 10.9 млн?, 100к), Android Native (5.9 млн, 1.3к), Xamarin (1.5 млн, 5.5к), NativeScript (2.1 млн, 20.8к), jQuery Mobile (похоже сдох 1 млн?, 9.8k), Framework7 (1.6 млн?, 16к звезд на Гитхаб), Corona SDK (0.5 млн, переименовался в Solar2D, похоже дохнет, 1.7к), Unity (1 млн, 12.2к звезд для топ репозитория из 565, т.е. всего ~40к?).

Последние статьи об Ionic на английском:

1. Pros and Cons of Ionic Framework, март 2021

Плюсы: одна кодовая база, много готовых компонентов, гибкость веба и нативных функций, простота, ускорение разработки, большая экосистема

Минусы: низкая производительность приложений, проблемы с интеграцией плагинов, не подходит для разработки игр, проблемы с безопасностью

2. Ionic Vs Flutter: Step-By-Step Detailed Guide of 2021, март 2021

Плюсы: легко научиться, много встроенных фич, понятный фронтенд, используется во многих компаниях разного размера, хорошая поддержка разработчиков

Минусы: проблемы с плагинами, трудности с дебагом (непонятные тексты ошибок)

3. Ionic vs React Native: Pros and Cons, июнь 2020

Плюсы: хорошая документация, технологии знакомые веб-разработчикам (HTML, CSS, JavaScript), легко создавать PWA

Минусы: кроме бесплатных фич за многие плагины нужно платить, приложение построено поверх веб-браузера и к нэйтив фичам непросто получить доступ

Вот какой график загрузки npm пакетов для Ioniс vs React Native.

Сравнение Native, Hybrid и Cross-Platform мобильных приложений.

Сравнение ключевых слов на сайтах поиска работы:

Выложил на Ютуб видео с тестом на скорость отклика Ionic-приложений, мое и еще 12.

Выводы

  1. Самая большая проблема Ionic - катастрофически низкая скорость отклика приложения. По сути это веб-браузер внутри обычного приложения. Прямая аналогия Ionic - сайт 90х годов. Априори он будет медленнее, чем десктоп / нэйтив приложение. Я установил на смарт (LG G6+, 4Gb RAM, Android 8) свой апп, а также приложения из учебных примеров на сайте Ionic - Spotify-like UI, Contact Apps и мобаппы с Google Play, которые были написаны на Ionic: ionic-app-hello-world, Ionic 5 Foodies, Ionifits, Daylio, Big JSON in Ionic, Ionic 3 Shopping App Template, Sworkit, JustWatch, MarketWatch, Joule. В целом они работают терпимо. Но меня настораживает, что мое приложение подвисает на 4-40! сек при переключении табов после того, как я зашел на первый таб со всеми контролами и домотал их до конца, чтобы они загрузились в память. Лечится все переоткрытием аппа, что типовой юзер, понятно, делать не будет, а сразу снесет апп. Стартует апп за 15-30 секунд до полной загрузки, что довольно много. ТГ и ФБ стартуют за 3 сек, Яндекс Метро за 7 сек, Тиндер за 10 сек. Возможно в будущем по мере ускорения смартфонов проблема низкой скорости Ionic сойдет на нет.

  2. Другая потенциальная проблема Ionic - плагины, т.е. переходники для доступа к нативным фичам устройства. Я использовал 6 из 23 официальных плагинов и проблем не было. Но. Если проблема с плагином возникнет, то легко ее решить не получится, разве что написать свой собственный плагин.

  3. Неприятная родовая травма приложений на Ionic - постоянное мелькание (перериросовка) экрана и особенно верхней части, где данные о зарядке и времени.

  4. У Ionic очень хороший маркетинг. В данном случае это минус. В мире капиталистических акул широко известна способность продажных маркетологов обернуть любую коричневую субстанцию в блестящую обертку и продать под видом конфет. На сайте Ionic есть раздел с их клиентами, примерами внедрения, в интернете полно статей вида ТОП 15 мобаппов на Ionic. К сожалению, в статьях всегда пишут о плюсах и никогда о минусах применения Ionic. Хотя в отзывах на мобапп MarketWatch (инфо от Dow Jones), который написан на Ionic, полно негатива про типовые проблемы Ionic: зависающее приложение, пустой экран, проблемы с сохранением, навигацией и логином в аккаунт.

  5. В целом, проблем при изучении не было. Поставил Visual Studio Code и Android Studio. Немного повозился с версией Ангуляра, пришлось даунгрейдить до 12 версии глобальный Ангуляр, чтобы его версия совпадала с локальной версией и не давало ворнинг о разных версиях. Приложения под iOS не делал, т.к. нужен был XCode, а ему нужна другая операционка - macOS, а у меня Windows 10 Home. Погуглил, можно через VirtualBox запустить у себя локально macOS, но лень было с этим возиться. В Android Studio создал эмулятор по параметрам своего смарта. По кнопке Run запускается эмулятор и туда загрузилось мое приложение за 5-10 сек. При деплое на реальный смарт, надо его подключить через USB и дождаться, чтобы оно определилось в Windows как новое устройство. Если не определяется, то во всплывашке в смарте поменять опции “Передача файлов” на “Перенос фото” (или наборот). При добавлении плагина Device поначалу писало ошибку “Error: "Device" plugin is not implemented on android”. Погугил, советуют фиксить проблемы с плагинами - в Андроид аппе регистрировать их вручную или наоборот отменить регистрацию. Я тупо пересоздал Андроид апп и посмотрел в гите изменения, которые были сделаны - все заработало. Пару раз примеры на сайте Ionic не компилились, поправил когда перешел с 5 на 6 версию (такой код: this.datetime.nativeEl.confirm(); исправил на: this.datetime.confirm(); т.к. ругался на nativeEl - не знал такого свойства.). Также выставил npm install date-fns --save т.к. в примере не была подключена такая библиотека). С компонентом picker нет Ангуляр примера, только Реакт и Vue, переделал Vue на Ангуляр. Размер моего аппа - 12.64Мб, вполне приемлемо. Если делаешь два одновременно приложения, то при деплое на смарт из Android Studio они перетирают друг друга (пофиксил через изменение GRADLE scripts \ app\build.gradle: applicationId "name.to.change"). Иногда компоненты backdrop или tab ломают UI приложения и замораживают другие кнопки. Поэтому надо по немногу комитить, чтобы откатиться назад, если все сломалось и непонятно что делать. При деплое на смарт включил опцию “Отладка USB” и установил на ПК драйвер USB для моего смартфона.

  6. Очень простые команды для работы с Ionic в Visual Studio Code:
    ionic start - создать темплейт ионик апп с нуля
    ionic serve - запускать мобапп с иоником в браузере
    ionic generate - создать новые фичи к мобаппу - directive class page component service module guard
    Для деплоя на мобайл:
    ionic build / ionic build --prod - сбилдить апп (если билдишь для прода то он включает strict режим и ругается если есть вызов несуществующих методов, используешь any и надо это пофиксить)
    ionic cap add android - создать апп для андроида (1 раз так сделать)
    ionic cap copy - скопировать сбилженную папку веба в папку для андроида
    ionic cap sync - это чтобы синкнуть из андроид папки изменения (добавление нового плагина) назад в веб код
    ionic cap open android - открыть в Андроид студио проект андроида сгенеренный или самому открыть
    ng add @angular/pwa - сделать свой апп PWA (добавляется service worker, app manifest + иконки)

  7. Внутри рынка СНГ Ionic не сильно популярен, см. график с числом вакансий. В СНГ для мобильной разработки самые перспективные технологии это Unity, React Native, Flutter и Xamarin, а Ionic на пятом месте. В целом это соответствует статистике по забугорью (Ванкувер, Берлин). Но, например, по статистике dice.com Ionic поднимается внезапно на третье место - там тройка лидеров выглядит как Unity, Xamarin, Ionic.

  8. От Ionic ожидал, что он будет построен на чистых веб-технологиях (JS/TS, HTML, Angular) и это почти так. Вдобавок у него много встроенных контролов, на которых стоит делать приложение (кнопки, переключалки, слайдеры, поповеры, табы). Но есть понятная документация, никаких проблем с изучением.

  9. Ionic прекрасно решает проблему медленной отладки приложения. После изменения кода через секунду оно перекомпилируется и обновится в браузере на десктопе.

  10. Я хотел бы получить от Ionic решение проблемы 20/80. Используя 20% усилий получить 80% функционала мобильного приложения. На данный момент я не ставлю цель научиться создавать игры или другие тяжелые мобаппы, использующие 100% ресурса смартфона и выжимающие 100% скорости. Я хочу научиться делать MVP бизнес-приложений, потолок - создание каркаса Тиндер в течение недели. Вроде бы Ionic обещает, что это можно сделать.

  11. Идея сделать себе 4х-дневную неделю была отличной! Все равно, конечно, половину пятниц не работаю, а отдыхаю - хожу на каток, совершаю мини-путешествия и т.п. Но зато не как раньше (тогда приползал домой вечером после часа дороги в метро, чуток тупил в телик и ложился спать, а на выходных отсыпался). Могу продуктивно работать вечером в будни и на выходных. Смог не бросить дело на пол пути, хотя в первое время постоянно отвлекался на СМИ, ТГ, ФБ. То матч на чемпиона мира по шахматам, то классный фильм по ТВ или обзор Бэда, то черные драконы в стойле застоялись. Очень сложно заставить мозг читать скучную спеку, а не залипнуть в ФБ за очередной дозой дофамина. Похоже, нашел решение проблемы work-life balance. Раньше не было времени на саморазвитие и постоянно была фрустрация из-за того, что тебя часто бросают в проект где технологии, которых ты не знаешь и нет времени их изучать (по плану мы закрываем задачи, а не читаем спеку) и постоянно косячишь, не попадаешь в эстимейты, овертаймишь чтобы догнать график, а в результате выгорание, конфликты в команде и “надо бы обновить CV на hh”.

Спасибо что дочитали до конца! Исходники проекта на Гитхаб тут, PWA версия приложения задеплоена сюда. Добавляйтесь в ФБ, ТГ, Линкедин. А здесь я делюсь опытом, как изучал нейросети, учился на продакта и запускал стартап.

UPD 20:40 03.01.22: Обновил графики по числу вакансий. Добавил статистику по Linkedin (РФ, Ванкувер, Берлин). Также пересчитал статистику для двухбуквенных слов (React Native, Android Native, jQuery Mobile, Corona SDK). При поиске на сайте стал задавать их в кавычках: "jQuery Mobile". На первую тройку технологий (Unity, React Native, Flutter) это не повлияло, но как и требовалось, опустило "jQuery Mobile" на последние позиции, т.к. раньше по статистике у dice.com она была на первом месте.

Комментарии (27)


  1. TelAndXX
    02.01.2022 22:11
    +3

    Никогда не понимал задумку делать с помощью Айоника приложение с долгосрочным развитием. PoC или MVP - пожалуйста, но с условием дальнейшего переписывания под конкретные платформы отдельно.


    1. berlicon Автор
      02.01.2022 22:26
      +2

      Ну, 90% мобаппов, которыми люди пользуются это простые бизнес приложения, у которых низкие требования к UI и скорости работы. Например ФБ, ТГ, Вотсапп, Тиндер, Метро, Такси, Еда, всякие одностраничные аппы компаний с инфо о них и максимум записью на услуги. Хотелось бы научиться делать такие, но без геморройной отладки и изучения новых языков и встроенных фич платформы, а с типовым фронтенд стеком, который я знаю.


      1. TelAndXX
        02.01.2022 22:27
        +1

        А ты знаешь как написан Тиндер к примеру? У меня самого там претензии к его работе, кажется там типичный Нэйтив подход.


      1. TelAndXX
        02.01.2022 22:29

        Айоник для этих всех приложух вряд-ли использовался. Пруфы хотелось бы конечно, но чтоб никто не брал на вооружение гибридный подход если качество важно на выходе.


      1. TelAndXX
        02.01.2022 22:31
        +3

        Ты же сам привел Флаттер как пример) вот там лучше результат будет, это не Гибрид, там нэйтив лучший выходит среди всех кроссплатформенных инструментов


  1. TelAndXX
    02.01.2022 22:15
    +1

    И как это тебе советовали Mobile Blazor Bindings?? Там ещё очень сыро и годится только для попробовать. И между прочим шансов в среде .NET спустится до нэйтив куда больше вашего недоАйоника.


    1. berlicon Автор
      02.01.2022 22:19

      Да, очень сырая штука и раздел на сайте выглядит заброшенным.


      1. TelAndXX
        02.01.2022 22:21
        -1

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


      1. TelAndXX
        02.01.2022 22:23
        +1

        И опять же гибридный подход и здесь не зайдет для больших проектов, даже средних. Да, здесь нет плагинов, нейтив код писать можно, но WebView портит всю малину как и в Айоник.


        1. berlicon Автор
          02.01.2022 22:32

          Вот прям досада берет, почему Ионик сделали весь свой набор контролов, штук 50 - но засунули приложение с ними внутрь вебвью/браузера. Можно наверно было как-то исхитриться и трансформировать их (и фронт бэк в виде Ангуляр впридачу) в нейтив приложение с нейтив контролами Андроид/iOS чтобы получить высокую скорость нейтив аппа, а не эти постоянные мелькания вебвью.


          1. TelAndXX
            02.01.2022 22:40
            +1

            Даже React Native не облегчает сильно эту задачу приближения к Нэйтив и он сильно уступает Флаттеру по скорости. NativeScript не знаю.


          1. TelAndXX
            02.01.2022 22:45
            +2

            У меня знакомый из продуктовой компании делал версию продукта года три на Айоник. Вначале было красота, удобство, спустя время - боль с плагинами, производительностью и т.д. Потом его отстранили и он стал заниматься чисто веб-приложением, никакого мобайла.


          1. D0001
            03.01.2022 11:18
            +1

            Я делал несколько приложений на Ionic - мельканий не было, может это просто неправильное использование того же Ангуляра, когда не часть страницы перерисовывается, а вся целиком?


            1. berlicon Автор
              03.01.2022 15:43

              В моем тестовом аппе на первом табе штук 50-100 контролов из которых 15-20 замаплено на захадкоженные (без получения данных с бэка по веб апи) переменные во фронтовом бэке *.ts коде контроллера страницы/компонента. Имхо ангуляр должен такое на лету без задержек отображать. Имхо это не повод тормозить по 30-40 сек при отображении таба и мелькать.


  1. ASGAlex
    03.01.2022 00:48
    +5

    Ох, в своё время наелся я этими гибридами так, что даже и близко не хочу подходить, если клиенту требуется полноценное мобильное приложение.

    Сам я бэкенд разработчик, но несколько раз в сложных ситуациях приходилось затаскивать мобильную разработку, имея в распоряжении команду, работающую со стеком "для сайтостроя". То есть единственным выходом в моем случае было выбрать технологию, на которой интерфейс можно тупо сверстать, а нативный функционал получить плагинами.

    С чем бы я ни работал - чистый PhpneGap, DrupalGap, Ionic (2016 года выпуска) - во всех случаях полученный результат напоминал поделку на коленке, а не полноценное приложение. Несмотря на то, что к разработке со стороны фронтенда привлекалась сильная команда ни с одним крутым проектом за спиной.

    И проблемы везде одни и те же:

    1. Всё крутится в браузере. А движки везде разные. Где-то web view одной версии, где-то другой, какие-то мелкие ньюансы они рендерят по-разному. Конечно на демо-приложениях это не видно, но в продакшнне у требовательного корпоративного или гос-клиента......

    2. Плагины. И мало того, что есть они далеко не на все случаи жизни, так ещё и на разных платформах по-разному работают, если вообще от одного автора есть под всё платформы этот плагин. В итоге получаем платформо-зависимый код, хотя нам обещали, что его не будет...

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

    4. В целом набор возможностей. Например, в одном проекте у нас в дизайне были карты и кнопка, чтобы восстановить ориентацию "на север". Позже клиенту предстояло узнать, что на Ionic такого мы никогда не сделаем.

    5. JavaScript и среда выполнения. Всё-таки браузер - не лучшее место для обширной логики, кучи асинхронных операций, включая коммуникацию по REST. Особенно если это браузер на доходом мобильном устройстве с дохленьким процессором и короткой памятью.

    По каждому из пунктов можно нырнуть внутрь и "набомбить" ещё с десяток подпунктов и историй об их взаимосвязи, но, наверное,ине в формате комментария.

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

    А Ionic и аналоги, по сути, это фреймворки, которые были бы хороши для разработки мобильных сайтов, но вводят нас в заблуждение, обещая, что отлично будут решать поставленные задачи и узконаправленно на мобилках.

    В общем, моё мнение - просто не нужно использовать ЭТО для мобильной разработки. Ни вчера, ни сегодня, ни через годы. Лучше оно не станет, ведь все болячки прописаны в их "генетическом коде".


    1. berlicon Автор
      03.01.2022 10:28

      Спасибо за крутой коммент! Был бы чрезвычайно благодарен если найдете время и отпишите здесь или ссылкой на статьи (своей статьей на хабре?) со списком всех тех багов, которые связаны с Ионик на разных устройствах в т.ч. старых. Т.к. некоторые мелкие баги могут оказаться фатальным шоустоппером для конкретного кейса и позволят оперативно принять решение стоит ли связываться с Ионик.


  1. BackLaN
    03.01.2022 01:59
    +1

    Framework7 быстро отрисовывается на мобиле, почти как Native на iOS, на старых Android есть проблемы со скоростью работы webview, насколько помню для решения этого собирали приложение c добавление webview из Crosswalk, который билдится со свежей версии Chrome.


    1. ASGAlex
      03.01.2022 02:07
      +1

      Да, Crosswalk избавлял от части проблем, добавляя ~30 мегабайт к весу финального приложения, что бешено много для аппликейшена уровня "сайт".

      В условиях, когда все операции вертятся в одном потоке, это всё равно не очень помогает, а тем более когда само железо устройства не сильно мощное.


  1. luxa_klim
    03.01.2022 13:44
    +1

    Полезная статья. Как раз собирался заняться Ionic, но по всему выходит, что буду постенно изучать Flutter. Спасибо, за статью.


    1. berlicon Автор
      03.01.2022 15:36

      Да, после прочтения комментарий и своего небольшого практического опыта с Ионик тоже стал склоняться к Флаттер или Реакт нейтив или, если оставаться в известном мне .net/c# стеке - Xamarin или Unity. Попробую еще одно приложение на Ионик сваять и замерю скорость. Если будут тормоза - запуск аппа >7сек, а переключение между табами (отклик на клик по кнопке) >5 сек без доп нагрузки по получению данных с бэка, то придется с Ионик заканчивать.


  1. LiauchukIvan
    03.01.2022 15:36
    +1

    Было очень интересно почитать про такую экзотику, как Ionic.

    Считаю, что сейчас самым актуальным кросс решением является Flutter, с единым языком в "обойме". Dart - весьма простой и наглядный ЯП. Переход на него с JS происходит очень быстро. А если есть опыт разработки React/React Native, так и вообще всё просто.

    Подскажите, почему в стравнениях нету KivyMD? Тоже, вроде как, сейчас вполне живой проект со своими адептами.


    1. berlicon Автор
      03.01.2022 15:51

      KivyMD - в первый раз о таком слышу и ни в одной статье где сравнивали фреймворки для моб разработки о таком не упоминали. Может и крутая штука, но исследование его возможностей требует времени, которое можно потратить на изучение более популярных библиотек.

      Насчет Flutter и React native - у меня опыт с .Net/C# и Angular/Typescript/Html - поэтому для моб разработки искал в первую очередь что-то дотнетное или вебовское из знакомого мне стека.


  1. Flywood
    03.01.2022 15:44
    +1

    Спасибо автору за статью.
    Я пишу на Ionic, и его реинкарнации Capacitor, уже довольно долго.
    И не совсеми тезисами я могу согласиться.
    В статье смешаны понятия Ionic, Ionic + Cordova и Capacitor.

    Сам по себе Ionic - это набор веб-компонентов заточенных под использоватние на мобильных устройствах. Его можно спокойно использовать на любых веб-страницах.

    Cordova + Ionic - Это Cordova-приложение. И тут архитектуру диктует именно Cordova. С этим связано то, что прложение получается тяжелым и медленным. А также то что вносить измменения в нативную часть очень тяжело. Я в своё время модифицировал плагин пуш уведомлений, а плагин Apllepay добавил в магазин плагинов.
    (Сразу оговорюсь, не я автор плагина Apple Pay. Я только его нашел, доработал, и добавил в магазин.)

    Capacitor - Это новая реинкарнация этого фреймворка. Тут уже берется любое SPA и запускается в нативном WebView. Тем самым получая лучшее из связки натива и веба.
    Дальше, при желании, приложение можно модифицировать как со стороны веба, так и со стороны натива. Типичный пример - добавление функционала получения Push-уведомлений на IOS. Там не просто плагин добавляется, там нужно ручками внести изменения в нативную часть.

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

    И, насколько я понимаю, команда Ionic движется в сторону структуры когда в в нативном приложении будут запускаться несколько мелких веб приложений. Давая нативному приложению гибкость дизайна веба.
    Возможности браузера(читаем Chrome) растут очень быстро, а с ними и возможности кросплатформенных фреймворков.
    Так что не стоит недооценивать фозможности такой разработки.
    А для тех кто все же решил писать на Ionic/Capacitor я бы посоветовал начинать так же изучать и нативную часть мобильной разработки.


    1. berlicon Автор
      03.01.2022 16:19

      Спасибо за подробный ответ. Будет супер если поделитесь инфой какие минусы у Ионик есть с учетом вашего опыта разработки на Ионик. Насколько трудоемко оказалось решение проблем в реальных кейсах и в каких случаях баги пофиксить не удалось (= примирили клиента что это не фиксится из-за родовых травм Ионик).

      По поводу того, что в статье смешаны понятия. Старался писать понятно, возможно недостаточно смог это сделать. ОК, я писал о связке Ionic+Capacitor. Т.е. я открыл спеку ионик, прочел ее всю и сделал все примеры с применением Capacitor как было сказано в учебной спеке + еще 3 плагина Capacitor.

      В целом мой посыл был в том, что я хочу получить мобапп. Какие технологии будут внутри - без разницы, но желательно знакомые мне (C#, Angular, Typescript, Html). От моб фреймворка я всего-то хочу:

      1) Быстрый дебаггинг/лайв релоадинг - как у веб аппов за секунду перебилдивается апп в браузере - Ионик это делает прекрасно, понятно, что нейтив фичи надо тестить в эмуляторе или смарте.

      2) Быстрая работа приложения, задеплоенного на смарт на всех (почти), в том числе старых смартах (до 5 лет). А не такая порнография как переключение табов по 40 сек и старт аппа за 30 сек.

      3) Отсутствие геморроя при работе с нейтив фичами через плагины и др.


  1. berlicon Автор
    03.01.2022 16:41

    Вынесу из личной переписки. Имхо очень важный момент про негатив сторов к аппам, построенных на webview. Буду рад если прокомментируют те, кто выкладывал в стор аппы, сделанные на Ionic/WebView, были ли проблемы с этим.

    >>> Привет насчет вашей статьи. Вы не озвучили главную проблему. Сторы крайне негативно относятся к приложениям на WebView до того что у меня было 4 заказа от людей опубликовать cordova приложения. А Xamarin или react native очень хороши. Ну и да смените процессор все же гонять в эмуляторе с ускорением намного лучше причем фирменный эмулятор менее глючный. И один из моих проектов по запуску macos в виртуалке.

    https://vc.ru/dev/102724-app-store-novye-trebovaniya-skoro-vstupayut-v-silu-chto-budet-s-prilozheniyami-na-html5 и вот это https://coderoad.ru/31170598/%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B0%D0%B5%D1%82-%D0%BB%D0%B8-app-store-%D0%B8%D0%BB%D0%B8-Play-Store-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B8%D0%BC%D0%B5%D1%8E%D1%89%D0%B8%D0%B5-WebView-%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D0%B4%D0%BB%D1%8F


  1. siroBS
    03.01.2022 17:17
    +1

    Сейчас пилю MVP pet проекта. Под капотом так:

    • UI: Svelte + Ionic (собираем yarn'ом)

    • Back: AIOHTTP за Caddy (такааая вкусняяяшка, простой конфиг + автоматически сам разруливает с HTTPS сертификатами) + PostgreSQL (пробую PonyORM)

    • CI/CD: podman (self VPS)

    Бандл первого экрана c элементами интерфейса весит 650Kb (вместе с библиотеками компонентов, стилями, иконками, Ionic с CDN), передано по сети 200Kb. Нужная графика, конечно, в svg. Работает, вроде, довольно шустро. Багов с компонентами Ionic за два месяца не обнаружено, написано 10 экранов разных интерфейсов. Особо радует Svelte со своим Stores (state management) - это просто песня.

    Вибро из Chrome (Navigator.vibrate()) в андроиде работает. В iOS не работает. Работу в Safari (неважнецкая поддержка новых/старых фичей JS) тестирую в VMware Workstation 16 с образом macOS Mojave через эмулятор iPhone в Xcode.

    Что нравится в Ionic, платформозависимый интерфейс веб приложения из коробки. На разных устройствах вид нативных приложений. Компоненты интерфейса туда же. Очень легко и быстро собрать MVP. Бандл очень маленький.

    Я к чему. Если не нужен функционал нативных приложений, рассмотрите возможность не заворачивать фронт в приложение, как PWA работает достаточно удобоваримо.


  1. berlicon Автор
    03.01.2022 20:51

    UPD 20:40 03.01.22: Обновил графики по числу вакансий. Добавил статистику по Linkedin (РФ, Ванкувер, Берлин). Также пересчитал статистику для двухбуквенных слов (React Native, Android Native, jQuery Mobile, Corona SDK). При поиске на сайте стал задавать их в кавычках: "jQuery Mobile". На первую тройку технологий (Unity, React Native, Flutter) это не повлияло, но как и требовалось, опустило "jQuery Mobile" на последние позиции, т.к. раньше по статистике у dice.com она была на первом месте.