Дмитрий Кулижников
TRANSCRIPT
Реактивные грабли
Дмитрий Кулижников
Руководитель группы разработки
2ГИС
2
0:04 -3:58
Two WeeksFKA 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 ArtemArtem,
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 WeeksFKA Twigs – LP1
42%Sketch 9:41 AM
0:04 -3:58
Two WeeksFKA Twigs – LP1
42%Sketch 9:41 AM
Заключение
• Разберитесь с идеей реактивщины до ее использования
41
Заключение
• Разберитесь с идеей реактивщины до ее использования
• Читайте документацию и исходники
42
Заключение
• Разберитесь с идеей реактивщины до ее использования
• Читайте документацию и исходники
• Не используйте реактивный подход везде подряд
43
Заключение
• Разберитесь с идеей реактивщины до ее использования
• Читайте документацию и исходники
• Не используйте реактивный подход везде подряд
• Будьте реактивнее
44
@renascence
Дмитрий Кулижников
Руководитель группы разработки
2ГИС
Вопросы?
45