SlideShare a Scribd company logo
1 of 45
Download to read offline
Реактивные грабли
Дмитрий
Кулижников
Руководитель
группы разработки
2ГИС
2
0:04 -3:58
Two Weeks
FKA Twigs – LP1
42%Sketch 9:41 AM
3
4
ReactiveCocoa RxJava Rx.NET
Грабли одни и те же
5
Сигнал
6
2 3 5 7
7
A
CancelA
Идея реактивного подхода
Идея реактивного подхода
8
A
CancelAr
Ar
Идея реактивного подхода
9
A
CancelArt
Ar Art
Идея реактивного подхода
10
A
CancelArte
Ar Art Arte
Идея реактивного подхода
11
CancelArtem
A Ar Art Arte Artem
12
Cancel
Apple
Artem
Artur
A textSignal
contactsSignal
13
A Ar Art Arte Artem
map (name -> findContacts(name))
Apple,
Artem,
Artur
Artem,
Artur
Artem
Artem,
Artur
Artem
distinctUntilChanged
Apple,
Artem,
Artur
Artem,
Artur
Artem
Преимущества
14
• Унификация обработки событий
Преимущества
15
• Унификация обработки событий
• Создание новых сигналов на основе существующих
Где грабли?
16
Жизненный цикл
17
18
1 1 3 7 7
1 1 3 7 7
1 1 3 7 7
error
completed
takeUntil:willDeallocSignal
YES NO YES
subscribeNext
apiRequest(…)
19
YES NO YES NO
dealloc()
Жизненный цикл
20
• Риск выжрать весь трафик пользователя
• Деградация производительности
Hot & Cold
21
Cold
22
1 3 42 5
subscribeNext
1 2 3
subscribeNext
4 15 2 3 4 5
Hot
23
A Art ArteAr Artem
subscribeNext
Arte Artem
cache:1
24
A Art ArteAr Artem
subscribeNext
Arte ArtemArt
Multicast connection
25
publish
1 3 7
subscribeNext, subscribeNext
connect
Hot & Cold
26
• Риск выжрать весь трафик пользователя
• Деградация производительности
Документация и исходники
27
28
1 2 7 3
toArray
[1, 2, 7, 3]
completed
1 3 7
29
distinctUntilChanged
1 1 3 7 7
30
1
delay:5
take:1
1
1
31
1 2 7 3
A B
2A 7A 7B 3B
combineLatest
Документация и исходники
32
• Риск потерять дни в дебаггере и гугле
• Использование дополнительной памяти
Архитектура
33
Subject
• Сигнал
34
Subject
• Сигнал
• Связывает императивный код с реактивным
35
Subject
• Сигнал
• Связывает императивный код с реактивным
• Обладает публичными методами
• sendNext
• sendError
• sendCompleted
36
Subject
• Subject торчит наружу в публичном интерфейсе
37
Subject
• Subject торчит наружу в публичном интерфейсе
• Подписка на Subject внутри императивного кода
38
Реактивщина не для всего
39
40
0:04 -3:58
Two Weeks
FKA Twigs – LP1
42%Sketch 9:41 AM
0:04 -3:58
Two Weeks
FKA Twigs – LP1
42%Sketch 9:41 AM
Заключение
• Разберитесь с идеей реактивщины до ее использования
41
Заключение
• Разберитесь с идеей реактивщины до ее использования
• Читайте документацию и исходники
42
Заключение
• Разберитесь с идеей реактивщины до ее использования
• Читайте документацию и исходники
• Не используйте реактивный подход везде подряд
43
Заключение
• Разберитесь с идеей реактивщины до ее использования
• Читайте документацию и исходники
• Не используйте реактивный подход везде подряд
• Будьте реактивнее
44
@renascence
Дмитрий
Кулижников
Руководитель
группы разработки
2ГИС
Вопросы?
kulizhnikov@gmail.com
45

More Related Content

Viewers also liked

Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Роман Янке
Роман ЯнкеРоман Янке
Роман ЯнкеCodeFest
 
Никита Арыков и Анастасия Лагунова
Никита Арыков и Анастасия ЛагуноваНикита Арыков и Анастасия Лагунова
Никита Арыков и Анастасия ЛагуноваCodeFest
 
Кирилл Харьков
Кирилл ХарьковКирилл Харьков
Кирилл ХарьковCodeFest
 
Андрей Себрант
Андрей СебрантАндрей Себрант
Андрей СебрантCodeFest
 
Дмитрий Химион и Сергей Белов
Дмитрий Химион и Сергей БеловДмитрий Химион и Сергей Белов
Дмитрий Химион и Сергей БеловCodeFest
 
Иван Фролков
Иван ФролковИван Фролков
Иван ФролковCodeFest
 
Евгений Брянцев
Евгений БрянцевЕвгений Брянцев
Евгений БрянцевCodeFest
 
Павел Мочалкин
Павел МочалкинПавел Мочалкин
Павел МочалкинCodeFest
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Андрей Светлов
Андрей СветловАндрей Светлов
Андрей СветловCodeFest
 
Денис Башев
Денис БашевДенис Башев
Денис БашевCodeFest
 
Александр Лукин
Александр ЛукинАлександр Лукин
Александр ЛукинCodeFest
 
Анатолий Шарифулин
Анатолий ШарифулинАнатолий Шарифулин
Анатолий ШарифулинCodeFest
 
Иван Величко
Иван ВеличкоИван Величко
Иван ВеличкоCodeFest
 
Саша Гладких и Андрей Старков
Саша Гладких и Андрей СтарковСаша Гладких и Андрей Старков
Саша Гладких и Андрей СтарковCodeFest
 
Алексей Ильичев
Алексей ИльичевАлексей Ильичев
Алексей ИльичевCodeFest
 
Максим Дорофеев
Максим ДорофеевМаксим Дорофеев
Максим ДорофеевCodeFest
 
10 pm mythes and tables rus
10 pm mythes and tables rus10 pm mythes and tables rus
10 pm mythes and tables rusEvgeny Tyrtyshny
 
Km based ecomomy e tyrtyshny
Km based ecomomy e tyrtyshnyKm based ecomomy e tyrtyshny
Km based ecomomy e tyrtyshnyEvgeny Tyrtyshny
 

Viewers also liked (20)

Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Роман Янке
Роман ЯнкеРоман Янке
Роман Янке
 
Никита Арыков и Анастасия Лагунова
Никита Арыков и Анастасия ЛагуноваНикита Арыков и Анастасия Лагунова
Никита Арыков и Анастасия Лагунова
 
Кирилл Харьков
Кирилл ХарьковКирилл Харьков
Кирилл Харьков
 
Андрей Себрант
Андрей СебрантАндрей Себрант
Андрей Себрант
 
Дмитрий Химион и Сергей Белов
Дмитрий Химион и Сергей БеловДмитрий Химион и Сергей Белов
Дмитрий Химион и Сергей Белов
 
Иван Фролков
Иван ФролковИван Фролков
Иван Фролков
 
Евгений Брянцев
Евгений БрянцевЕвгений Брянцев
Евгений Брянцев
 
Павел Мочалкин
Павел МочалкинПавел Мочалкин
Павел Мочалкин
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Андрей Светлов
Андрей СветловАндрей Светлов
Андрей Светлов
 
Денис Башев
Денис БашевДенис Башев
Денис Башев
 
Александр Лукин
Александр ЛукинАлександр Лукин
Александр Лукин
 
Анатолий Шарифулин
Анатолий ШарифулинАнатолий Шарифулин
Анатолий Шарифулин
 
Иван Величко
Иван ВеличкоИван Величко
Иван Величко
 
Саша Гладких и Андрей Старков
Саша Гладких и Андрей СтарковСаша Гладких и Андрей Старков
Саша Гладких и Андрей Старков
 
Алексей Ильичев
Алексей ИльичевАлексей Ильичев
Алексей Ильичев
 
Максим Дорофеев
Максим ДорофеевМаксим Дорофеев
Максим Дорофеев
 
10 pm mythes and tables rus
10 pm mythes and tables rus10 pm mythes and tables rus
10 pm mythes and tables rus
 
Km based ecomomy e tyrtyshny
Km based ecomomy e tyrtyshnyKm based ecomomy e tyrtyshny
Km based ecomomy e tyrtyshny
 

Similar to Дмитрий Кулижников

Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019corehard_by
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Ontico
 
My talk at DevParty 2017
My talk at DevParty 2017My talk at DevParty 2017
My talk at DevParty 2017Alex Chistyakov
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017Alex Chistyakov
 
MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7Alexander Levantovsky
 
Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...Ontico
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
New approach to current text recognition development
New approach to current text recognition developmentNew approach to current text recognition development
New approach to current text recognition developmentGrid Dynamics
 

Similar to Дмитрий Кулижников (10)

Garbage collection in V8 VM
Garbage collection in V8 VMGarbage collection in V8 VM
Garbage collection in V8 VM
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
 
My talk at DevParty 2017
My talk at DevParty 2017My talk at DevParty 2017
My talk at DevParty 2017
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017
 
MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7MagicPlot @ UXSPb @ IT Global Meetup #7
MagicPlot @ UXSPb @ IT Global Meetup #7
 
8bit Scrum
8bit Scrum8bit Scrum
8bit Scrum
 
Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...Машинное обучение в электронной коммерции — практика использования и подводны...
Машинное обучение в электронной коммерции — практика использования и подводны...
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
New approach to current text recognition development
New approach to current text recognition developmentNew approach to current text recognition development
New approach to current text recognition development
 

More from CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита ПрокоповCodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис БаталовCodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 

More from CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

Дмитрий Кулижников