Size: a a a

Android Architecture

2020 February 21

(

( in Android Architecture
Igor
А если по существу, то сущности вытекают из иммутабельности RxJava, которым сильно злоупотребляют в MVI, то есть ваш перфоманс будет заметно просаживаться в отличии от более сбалансированного использования в других паттернах
Мифы
источник

АЕ

Алексей Ершов in Android Architecture
kirill
А какие ?
обсудили только что, и ещё несколько раз в прошлом) Неявный стейт UI, если в двух словах.
источник

(

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

(

( in Android Architecture
Но если они есть в мвиай, то они и в мвп будут
источник

(

( in Android Architecture
А конкуррент гц в андроиде на самом деле удивительно хорош, ООМ обычно происходит в нативной памяти (битмапы etc.) или если вы аллоцируете очень много очень больших листов
источник

I

Igor in Android Architecture
(
Мемори футпринт даже от самых жирных иммутабельных моделей минимизируется шаллоу копи, просадки по перформансу будут только там, где есть большие вычисления
Не согласен про "если есть MVI то есть в MVP", никто не станет в мвп вешать на кнопку rx  и обмазывать все вокруг rx'ом это как раз и есть "плодить без необходимости" плюс мы имеем дело с потоком, для каждого из потоков нужен свой стек (память 512кб), также переключение контекста и прочее, все это лишняя избыточность, также shallow copy отнюдь не значит что они будут быстро чиститься, это уже зависит от работы GC
источник

V

Vladimir in Android Architecture
Igor
Ребят может кто-то накидать минусы MVI, с которыми столкнулся при работе с данным паттерном?
дифы придется ручками считать, если это не ресайклер, либо обновлять сразу всю страничку при изменении стейта
источник

I

Igor in Android Architecture
Vladimir
дифы придется ручками считать, если это не ресайклер, либо обновлять сразу всю страничку при изменении стейта
да вот тоже хорошее дополнение, что будет в случае с Async Diff Utils и AsyncLayoutInflater
источник

АЕ

Алексей Ершов in Android Architecture
Igor
Не согласен про "если есть MVI то есть в MVP", никто не станет в мвп вешать на кнопку rx  и обмазывать все вокруг rx'ом это как раз и есть "плодить без необходимости" плюс мы имеем дело с потоком, для каждого из потоков нужен свой стек (память 512кб), также переключение контекста и прочее, все это лишняя избыточность, также shallow copy отнюдь не значит что они будут быстро чиститься, это уже зависит от работы GC
не встречал ещё ни разу просадку производительности из-за оверхеда на работу Rx. Обычно фризы из-за плохих layout или ещё какой-нибудь глупости. в баду вот всё приложение на MVI, и ничо, работает)
источник

(

( in Android Architecture
Igor
Не согласен про "если есть MVI то есть в MVP", никто не станет в мвп вешать на кнопку rx  и обмазывать все вокруг rx'ом это как раз и есть "плодить без необходимости" плюс мы имеем дело с потоком, для каждого из потоков нужен свой стек (память 512кб), также переключение контекста и прочее, все это лишняя избыточность, также shallow copy отнюдь не значит что они будут быстро чиститься, это уже зависит от работы GC
А причем здесь ркс? "Большие вычисления" - это пресловутые статик леяуты обсчитать, например
Потоки давно уже все засунуты в тредпул, а переключение контекста нужно очень постараться в рксе получить, когда это все колбеки на FJP
источник

(

( in Android Architecture
А про GC я серьезно. Почитайте как и когда он вызывается
Плюс STW паузы там едва ли достигают 100 наносекунд, и то они на его собственном потоке
источник

I

Igor in Android Architecture
Алексей Ершов
не встречал ещё ни разу просадку производительности из-за оверхеда на работу Rx. Обычно фризы из-за плохих layout или ещё какой-нибудь глупости. в баду вот всё приложение на MVI, и ничо, работает)
в конечном итоге работа любого приложения зависит от людей, которые его делают поэтому можно любой паттерн запилить прекрасно, тут скорее обсуждаем in average ( средняя по больнице)
источник

I

Igor in Android Architecture
(
А причем здесь ркс? "Большие вычисления" - это пресловутые статик леяуты обсчитать, например
Потоки давно уже все засунуты в тредпул, а переключение контекста нужно очень постараться в рксе получить, когда это все колбеки на FJP
важно ни то когда и как он вызывается, важнее что он удаляет, плюс мы все знаем что большинство вызовов minor (не major) и если в стеке есть ссылка на кучу, а потоков может быть много, то minor это удалять не будет
источник

I

Igor in Android Architecture
(
А причем здесь ркс? "Большие вычисления" - это пресловутые статик леяуты обсчитать, например
Потоки давно уже все засунуты в тредпул, а переключение контекста нужно очень постараться в рксе получить, когда это все колбеки на FJP
также хотел сказать, что я не стараюсь спорить, скорее мне интересно мнение участников и спасибо вам за полезную информацию
источник

I

Igor in Android Architecture
Алексей Ершов
не встречал ещё ни разу просадку производительности из-за оверхеда на работу Rx. Обычно фризы из-за плохих layout или ещё какой-нибудь глупости. в баду вот всё приложение на MVI, и ничо, работает)
спасибо за мнение очень полезно было
источник

(

( in Android Architecture
Igor
важно ни то когда и как он вызывается, важнее что он удаляет, плюс мы все знаем что большинство вызовов minor (не major) и если в стеке есть ссылка на кучу, а потоков может быть много, то minor это удалять не будет
Миноров вполне хватает, чтобы вычистить недолгоживущие стейты
Последний раз когда я замерял, у меня он вызывался раза три в секунду 🌚
источник

U

Unat in Android Architecture
Аналогично, складывал в стейт относительно громоздкие структуры, никаких фризов непосредственно при обработке событий не было
источник

I

Igor in Android Architecture
Как я подчеркнул выше мы говорим о каком-то усредненном кейсе и вполне уверен, что есть достаточно разработчиков, которые сделают все ок, мне скорее важно было понять, где могут быть слабые места, а где сильные, это совсем не означает, что это повсеместное явление
источник

U

Unat in Android Architecture
Слабых мест не так много - можно облажаться при проектировании стейта, тогда будет очень тяжело вытянуть это костылями в момент, когда лажа всплывёт; много кода, но с помощью дженериков, фантазии и возможностей котлина дублирование можно очень сильно подрезать; и в целом наличие проблем сильнее зависит от опыта разработчика, т.к. из-за более жесткой завязки на типы уменьшается пространство для костылей. Если в MVP можно было спорную ситуацию "разрулить" положившись, например, на то, что первый отправленный запрос и вернётся первым, то в MVI это не будет так работать.
источник

U

Unat in Android Architecture
Получается что-то вроде "или делаешь хорошо, или никак"
источник