Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

React Native стоит ли использовать?

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Добрый день!

Стоит задача написать приложение. Флоу:
1. делать фотографии.
2. Частично их обрабатывать на клиенте.
3. отправлять на сервер фотку.
4. Ждать ответ и печатать результат от сервера.
5. Монетизация.

Вопросы:
1. для это задачи подойдет React Native?
2. Как RN работает с анимацией и «красотами» которые не влияют на core алгоритмы но при этом создают приятное ощущение от продукта.
3. Особенности поддержку 32/64 битных архитектур? Много ли боли?
4. Стабильно ли RN приложение при долгом рантайме?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

мышки не прекращают любить кактусы

Чем в разы лучше? Например тут habr.com/ru/post/328960 приведено следующее «В целом можно рекомендовать использовать Ionic 2 для быстрой разработки прототипов мобильных приложений, а React Native — для полноценной разработки готовых решений»

Указанные в топике требования на прототип не тянут ))

Довольно-много таки гемора с РН. Что-то нормально работает, а что-то нет, ввиду того, что РН — промежуточный слой эмуляции между апи андроида/иос. Я бы советовал не ввязываться в эту мишуру, несмотря на то, что РН активно вбрасывается и вокруг него крутится много хайпа

В принципе меньше всего проблем с Xamarin, хоть это и Microsoft. Глюков довольно мало, а готовых стабильных библиотек довольно много.
docs.microsoft.com/...​marin/ios-samples/opengl

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

Вроде флуттер по отзывам лучше...

Эффекты можно делать на WebGL (GPU), но придется еще учить язык написания шейдеров. Фреймворк поддерживается всеми современными браузерами.
ru.wikipedia.org/wiki/WebGL

Примеры работы с изображениями
webglfundamentals.org/...​bgl-image-processing.html

Либа под React Native для мобильных очень глючно работает.

Понятно, что поддерживается не всеми мобильными браузерами. Но все новые мобильные её поддерживают довольно хорошо, для остальных можно оставлять эффекты попроще или запускать на JS. Будет люто тормозить, но работать.

Вот возможность получения данных канваса и работы с ним, если не знали
www.w3schools.com/...​s/canvas_getimagedata.asp

Но на JS будет люто тормозить, где-то более чем в 100 раз медленнее чем WebGL.

То что вы описали относится к браузерному js, а React Native не исполняется в браузере. Есть библиотека для RN, которая предоставляет почти тоже самое API, что и WebGL, но она адски глючит и может вообще не работать на некоторых девайсах.
Есть конечно другой очень костыльный вариант — показывать через React Native какое-то webview, внутри которого будет исполняться webgl — но опять же, не на всех современных версиях ОС будет работать.

Ну вообще-то я сразу нашел четыре библиотеки, которые добавляют функциональность OpenGL в React Native. Да, они похожи на студенческие работы, чем на реальные технологии, но можно выбрать что-то рабочее.
github.com/...​munity/react-native-webgl
github.com/gre/gl-react-v2
github.com/gre/gl-react-native-v2
github.com/gre/gl-react

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

Решением здесь может быть две библиотеки: одна быстрая под OpenGL, вторая медленная на чистом JS. При старте приложение тестирует возможности OpenGL и если тест не проходит, то включает софтварную эмуляцию. Да, картинки будут обрабатываться по 10 сек, но будет работать.

Частичная обработка изображения на клиенте — это что?
Если простой ресайз, то вполне можно обойтись готовыми библиотеками (которые внутри тоже используют нативный код обычно). Если что-то серьезное и в будущем может быть еще более хардкорное, то RN это плохой выбор.
Рано или поздно все заканчивается форками популярных нативных компонентов и навсегда зависающиими пул реквестами, которые никто никогда не смержит.
Еще немного боли — часто эти компоненты написаны разработчиками, которые не пишут нативно на iOS/Android, такой код даже смотреть больно, не говоря о том, чтобы вносить изменения.
Все описанное основано на реальном опыте.

Спасибо за развернутый проект.

1. RN не подойдёт для этих задач

А можно больше конкретики? )

Вот я фанат смотреть звезды в телескоп, а мне нужно забить гвоздь, какой телескоп посоветуете? Наверное противоударный телескоп)

Схожесть синтаксисов разных языков?! Не, не слышал

Телескоп удобно держать.

Обертки над языком под платформы, как блджад этот топик?! Не не слышал

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

Под пайтон для андроида есть Kivy

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

я поклонник пайтона захочу под андроид или иос написать апп, какой самый быстрый фреймворк\язык стоит юзать, самый быстрый и простой путь?

На мой взгляд, самый простой и быстрый способ для поклонника пайтона начать писать под iOS или Android — это выучить Swift или Kotlin. Если ты владеешь пайтоном и хотя бы одним строго типизированным языком, то проблем у тебя с этим не возникнет.
К нам в отдел недавно перевелась девушка, как раз с пайтоном, уже через пару недель ее первый Swift код был в продакшене. Ничего грандиозного, но все же. Так она джуниор.

Не понятно что означает «Частично их обрабатывать на клиенте». Если считать что это изменить размер, добавить надпись поверх и что-нибудь в этом роде то:
1. Все описанные задачи посильны для React Native.
2. С умеренными по сложности анимациями работает неплохо
3. Поддерживаются, для андроида с 59 версии, особой боли не заметил
4. Нормально написанное приложение на React Native — вполне себе стабильно

Как попиксельно перебрать картинку через js на React Native (если захочется кастомных эффектов)?
Есть доступ к GPU через js?
И самое главное — перформанс всего этого дела?

изменить размер, добавить надпись поверх

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

+ по усіх пунктах. Ось тут можна глянути приклади анімацій www.youtube.com/...​/UC806fwFWpiLQV5y-qifzHnA

Какого рода обработка фото?

Судя по-описанию львиная доля это мультимедиа(обработка фото даже примитивная) и специфический UI.

React Native это для: отправили Rest запрос на сервер и показать список.
В React Native для более-менее адекватной навигации нужно проект Android Studio и Xcode руками править по-мануалу (кустарщина какая-то) .

Не советую. Быстрее под Андроид и iOS отдельные приложения сделать, та и поддерживать проще будет.

От приложений: Facebook, Airbnb у вас приятные ощущения?

Рест запрос и список это ионик, реакт нетив для приложений с логикой но не требовательной к цпу

Airbnb кстати уже больше года назад перешли с React Native на нативную разработку под Android и iOS отдельно.

1 статья из 5ти, объясняющая такой переход — medium.com/...​react-native-1868ba28e30a

Ну их решение практически никак не корелируют с возможностью React Native решать различные задачи в том числе и эту.
Если верить причинам отказа указанным тут: medium.com/...​ould-you-too-dcbff36def5c,
то ДЛЯ ИХ компании с большим числом разработчиков и с собственными стандартами разработки данная технология оказалась малоэффективной.

Ну и да, абсолютно согласен, указанные в статье причины действительно являются негативными «фичами» React Native. Но также ,на мой взгляд, все остальные плюсы однозначно перевешивают. В пользу этого говорит также факт популярности технологии (оценить можно например по количеству открытых вакансий здесь же на доу).

Підписатись на коментарі