SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler 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

Mais conteúdo relacionado

Destaque

Github Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияGithub Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияSQALab
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим БерёзкинDevDay
 
HackDay #42 в Иннополисе
HackDay #42 в ИннополисеHackDay #42 в Иннополисе
HackDay #42 в ИннополисеMikhail Kulakov
 
«Как работают менеджеры продукта в 2ГИС»  – Павел Мочалкин, 2ГИС
 «Как работают менеджеры продукта в 2ГИС»  – Павел Мочалкин, 2ГИС «Как работают менеджеры продукта в 2ГИС»  – Павел Мочалкин, 2ГИС
«Как работают менеджеры продукта в 2ГИС»  – Павел Мочалкин, 2ГИС2ГИС Технологии
 
«Непростой релиз» – Анжела Проселкова, 2ГИС
 «Непростой релиз» – Анжела Проселкова, 2ГИС  «Непростой релиз» – Анжела Проселкова, 2ГИС
«Непростой релиз» – Анжела Проселкова, 2ГИС 2ГИС Технологии
 
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИСПартицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС2ГИС Технологии
 
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИСИспользуем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС2ГИС Технологии
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС 2ГИС Технологии
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья ТаратухинDevDay
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил ИльиныхDevDay
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС2ГИС Технологии
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС2ГИС Технологии
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС2ГИС Технологии
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...2ГИС Технологии
 
Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...
Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...
Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...2ГИС Технологии
 

Destaque (20)

Github Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияGithub Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестирования
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин
 
HackDay #42 в Иннополисе
HackDay #42 в ИннополисеHackDay #42 в Иннополисе
HackDay #42 в Иннополисе
 
«Как работают менеджеры продукта в 2ГИС»  – Павел Мочалкин, 2ГИС
 «Как работают менеджеры продукта в 2ГИС»  – Павел Мочалкин, 2ГИС «Как работают менеджеры продукта в 2ГИС»  – Павел Мочалкин, 2ГИС
«Как работают менеджеры продукта в 2ГИС»  – Павел Мочалкин, 2ГИС
 
«Непростой релиз» – Анжела Проселкова, 2ГИС
 «Непростой релиз» – Анжела Проселкова, 2ГИС  «Непростой релиз» – Анжела Проселкова, 2ГИС
«Непростой релиз» – Анжела Проселкова, 2ГИС
 
Как защитить свой код
Как защитить свой кодКак защитить свой код
Как защитить свой код
 
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИСПартицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
 
Article25
Article25Article25
Article25
 
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИСИспользуем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
Используем неизменяемые данные и создаем качественный код — Игорь Кудрин, 2ГИС
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
«Построение Read Model-ей с использованием потоков событий» — Денис Иванов, 2ГИС
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
Continuous Delivery, или волшебная кнопка для релизов по запросу — Денис Яков...
 
Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...
Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...
Особенности автоматизации тестирования: Single-page vs Multi-page (Seleniumca...
 

Semelhante a «Реактивные грабли» — Дмитрий Кулижников, 2ГИС

Многопоточность в играх. Игорь Лобанчиков. 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
 

Semelhante a «Реактивные грабли» — Дмитрий Кулижников, 2ГИС (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
 

«Реактивные грабли» — Дмитрий Кулижников, 2ГИС