Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

Реактивные грабли

  • Login to see the comments

  • Be the first to like this

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

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

×