sunscrapers.comYour favored tech partner.
Reactive Programming
Kuba Włodarczyk
sunscrapers.comYour favored tech partner.
Aplikacje webowe kiedyś
sunscrapers.comYour favored tech partner.
Aplikacje webowe dziś
sunscrapers.comYour favored tech partner.
Czym jest programowanie reaktywne?
Reactive Programming Manifesto (http://www.reactivemanifesto.org/)
Cztery główne reguły RP:
- Responsive
- Scalable
- Resilent
- Message-driven architecuture
sunscrapers.comYour favored tech partner.
SPA (Single Page Application)
Aplikacja w przeglądarce
• strona pobierana raz
• mnóstwo logiki po stronie klienta
• strona nie przeładowywuje się
• dane (JSON, asynch, PUSH)
sunscrapers.comYour favored tech partner.
Droga do SPA: etap 1 - callback
sunscrapers.comYour favored tech partner.
Callback hell
sunscrapers.comYour favored tech partner.
Droga do SPA: etap 2 - promise
sunscrapers.comYour favored tech partner.
Promise hell
sunscrapers.comYour favored tech partner.
Observable na ratunek - Rx__
● Implementacje w wielu językach (JavaScript, Python, .Net, Java, Scala, Haskell, Closure, …)
● Duża społeczność i obszerne dokumentacje
● Używane przez dużych graczy na rynku (Netflix)
sunscrapers.comYour favored tech partner.
RxJS w praktyce
Wszystko w naszej aplikacji jest strumieniem
Sposób tworzenia strumienia:
- Z eventów (Event)
- Z NodeCallback
- Z tablicy (Array)
- Bezpośrednio: Observable.create
sunscrapers.comYour favored tech partner.
RxJS w praktyce
let observable = Observable.create((observer) =>
// some async operations
observer.onNext('hello'));
// or
observer.onError('Error occurs'));
// or
observer.onComplete('Stream ends’));
observable.subscribe(
(value) => console.log(value)
(err) => console.log(err)
);
sunscrapers.comYour favored tech partner.
RxJS w praktyce
// event
let input = $('input');
Observable.fromEvent(input, 'keyup')
.subscribe(() => console.log('keyup!'));
input.trigger('keyup'); // logs "keyup!"
input.trigger('keyup'); // logs "keyup!"
// array
Observable.fromArray([1, 2, 3, 4, 5])
.subscribe(x => console.log(x)); // 1, 2, 3, 4, 5
sunscrapers.comYour favored tech partner.
Operacje na strumieniach
● Filter
● Map
● Reduce
● Merge
● Zip
● flatMap
● debounce
● …
---> http://rxmarbles.com/
sunscrapers.comYour favored tech partner.
Przykład: debouncer
var q = document.querySelector('#query');
var observable = Rx.Observable.fromEvent(q, 'keyup')
.debounce(300)
.map(function (ev) { return ev.target.value; })
.where(function (text) { return text.length >= 3; })
.distinctUntilChanged()
.map(searchFor)
.switch()
.where(function (obj) { return obj !== undefined; });
sunscrapers.comYour favored tech partner.
Przykład: debouncer
function searchFor(text) {
var xhr = new XMLHttpRequest();
xhr.open('GET', apibaseUrl + '?q=' + text, true);
xhr.send();
return Rx.Observable.fromEvent(xhr, 'load').map(function (ev) {
var request = ev.currentTarget;
if (request.status === 200) {
var response = request.responseText;
return JSON.parse(response);
}
});
}
sunscrapers.comYour favored tech partner.
Wnioski
- Potężne narzędzie do pisania asynchronicznego kodu w różnych językach
- Rozwiązuje wiele problemów związanych z zarządzaniem zasobami i
zarządzaniem błędami
- Wspiera przy tworzeniu modularnego kodu
- Nacisk na stosowanie we współczesnych i przyszłych frameworkach SPA ( np.
React i Angular2)
sunscrapers.comYour favored tech partner.
Pytania?
Dziękuję za uwagę

More Related Content

PDF
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
PDF
Pan Oponka - Biografia
PDF
Deployment kodu z Capistrano
PDF
Service workers - bądź online, nawet kiedy jesteś offline!
PDF
Xdebug – debugowanie i profilowanie aplikacji PHP
PDF
Debugowanie skryptow php za pomoca xdebug
PDF
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PDF
Interruptions
Jakub Mrowiec (Grand Parade Poland) - Monumentum Case Study
Pan Oponka - Biografia
Deployment kodu z Capistrano
Service workers - bądź online, nawet kiedy jesteś offline!
Xdebug – debugowanie i profilowanie aplikacji PHP
Debugowanie skryptow php za pomoca xdebug
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
Interruptions

Viewers also liked (20)

PDF
DVCS Workflows for Teams - Bartek Rychlicki
PDF
How to justify your recommendation - Łukasz Karwacki
PDF
Jaka przyszłość czeka polskich programistów?
PDF
Creating value for customers - understanding context
PPTX
Django ORM - Marcin Markiewicz
PPTX
Py2 - Py3 migration - Krzysztof Skarupa
PPTX
Foundations of Foundation 6 - Jakub Włodaczyk (pl)
PPTX
Introduction to ReactJS - Comparison to AngularJS 2 - Robert Piękoś (pl)
PPTX
PostgreSQL and JSON with Python - Przemek Lewandowski
PDF
FRP with Ractive and RxJS
PDF
ReactiveX-SEA
PDF
Progressive Web Apps
PDF
Programação reativa com RxJS e Angular
PDF
Add Some Fun to Your Functional Programming With RXJS
PDF
RxJS Evolved
PDF
RxJS - The Reactive extensions for JavaScript
PDF
Functional Reactive Angular 2
PPTX
Angular2 + rxjs
PPTX
Rxjs ngvikings
PPTX
DVCS Workflows for Teams - Bartek Rychlicki
How to justify your recommendation - Łukasz Karwacki
Jaka przyszłość czeka polskich programistów?
Creating value for customers - understanding context
Django ORM - Marcin Markiewicz
Py2 - Py3 migration - Krzysztof Skarupa
Foundations of Foundation 6 - Jakub Włodaczyk (pl)
Introduction to ReactJS - Comparison to AngularJS 2 - Robert Piękoś (pl)
PostgreSQL and JSON with Python - Przemek Lewandowski
FRP with Ractive and RxJS
ReactiveX-SEA
Progressive Web Apps
Programação reativa com RxJS e Angular
Add Some Fun to Your Functional Programming With RXJS
RxJS Evolved
RxJS - The Reactive extensions for JavaScript
Functional Reactive Angular 2
Angular2 + rxjs
Rxjs ngvikings

Similar to Reactive programming (6)

PDF
RxJS okiem doświadczonego inżyniera - Angular Warsaw #13
PDF
Rx iOS dwa bratanki
PPTX
Aplikacje internetowe real-time w oparciu o React/Redux
PPTX
Single Page Applications przy wykorzystaniu REST
PPTX
RxJS WarsawJS Meetup #66
PDF
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
RxJS okiem doświadczonego inżyniera - Angular Warsaw #13
Rx iOS dwa bratanki
Aplikacje internetowe real-time w oparciu o React/Redux
Single Page Applications przy wykorzystaniu REST
RxJS WarsawJS Meetup #66
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript

Reactive programming

  • 1. sunscrapers.comYour favored tech partner. Reactive Programming Kuba Włodarczyk
  • 2. sunscrapers.comYour favored tech partner. Aplikacje webowe kiedyś
  • 3. sunscrapers.comYour favored tech partner. Aplikacje webowe dziś
  • 4. sunscrapers.comYour favored tech partner. Czym jest programowanie reaktywne? Reactive Programming Manifesto (http://www.reactivemanifesto.org/) Cztery główne reguły RP: - Responsive - Scalable - Resilent - Message-driven architecuture
  • 5. sunscrapers.comYour favored tech partner. SPA (Single Page Application) Aplikacja w przeglądarce • strona pobierana raz • mnóstwo logiki po stronie klienta • strona nie przeładowywuje się • dane (JSON, asynch, PUSH)
  • 6. sunscrapers.comYour favored tech partner. Droga do SPA: etap 1 - callback
  • 7. sunscrapers.comYour favored tech partner. Callback hell
  • 8. sunscrapers.comYour favored tech partner. Droga do SPA: etap 2 - promise
  • 9. sunscrapers.comYour favored tech partner. Promise hell
  • 10. sunscrapers.comYour favored tech partner. Observable na ratunek - Rx__ ● Implementacje w wielu językach (JavaScript, Python, .Net, Java, Scala, Haskell, Closure, …) ● Duża społeczność i obszerne dokumentacje ● Używane przez dużych graczy na rynku (Netflix)
  • 11. sunscrapers.comYour favored tech partner. RxJS w praktyce Wszystko w naszej aplikacji jest strumieniem Sposób tworzenia strumienia: - Z eventów (Event) - Z NodeCallback - Z tablicy (Array) - Bezpośrednio: Observable.create
  • 12. sunscrapers.comYour favored tech partner. RxJS w praktyce let observable = Observable.create((observer) => // some async operations observer.onNext('hello')); // or observer.onError('Error occurs')); // or observer.onComplete('Stream ends’)); observable.subscribe( (value) => console.log(value) (err) => console.log(err) );
  • 13. sunscrapers.comYour favored tech partner. RxJS w praktyce // event let input = $('input'); Observable.fromEvent(input, 'keyup') .subscribe(() => console.log('keyup!')); input.trigger('keyup'); // logs "keyup!" input.trigger('keyup'); // logs "keyup!" // array Observable.fromArray([1, 2, 3, 4, 5]) .subscribe(x => console.log(x)); // 1, 2, 3, 4, 5
  • 14. sunscrapers.comYour favored tech partner. Operacje na strumieniach ● Filter ● Map ● Reduce ● Merge ● Zip ● flatMap ● debounce ● … ---> http://rxmarbles.com/
  • 15. sunscrapers.comYour favored tech partner. Przykład: debouncer var q = document.querySelector('#query'); var observable = Rx.Observable.fromEvent(q, 'keyup') .debounce(300) .map(function (ev) { return ev.target.value; }) .where(function (text) { return text.length >= 3; }) .distinctUntilChanged() .map(searchFor) .switch() .where(function (obj) { return obj !== undefined; });
  • 16. sunscrapers.comYour favored tech partner. Przykład: debouncer function searchFor(text) { var xhr = new XMLHttpRequest(); xhr.open('GET', apibaseUrl + '?q=' + text, true); xhr.send(); return Rx.Observable.fromEvent(xhr, 'load').map(function (ev) { var request = ev.currentTarget; if (request.status === 200) { var response = request.responseText; return JSON.parse(response); } }); }
  • 17. sunscrapers.comYour favored tech partner. Wnioski - Potężne narzędzie do pisania asynchronicznego kodu w różnych językach - Rozwiązuje wiele problemów związanych z zarządzaniem zasobami i zarządzaniem błędami - Wspiera przy tworzeniu modularnego kodu - Nacisk na stosowanie we współczesnych i przyszłych frameworkach SPA ( np. React i Angular2)
  • 18. sunscrapers.comYour favored tech partner. Pytania? Dziękuję za uwagę

Editor's Notes

  • #2: W kilku zdaniach czym jest programowanie reaktywne Rys historyczny aplikacji webowych w kontekcie reactive programming Zastosowanie na przykładzie implementacji w języku Javascript - RxJS
  • #3: Prosta struktura Synchroniczny przepływ informacji
  • #4: Rozbudowana struktura, zewnętrzne aplikacje, duża asynchroniczność w komunikacji Problemy: Wydajność – Tradycyjne blokujące wołanie oraz obsługa to cios dla klienta i serwera ● Niezawodność – Części systemu mogą ulec awarii – Komunikacja jest niepewna – Zależymy od usług dostarczanych z zewnątrz Dzięki podejściu reaktywnemu: Sterowane zdarzeniami (event-driven) systemy mogą być: – Skalowalne (scalable) – Zdolne do samoleczenia (resilient) ● Dzięki czemu użytkownik obserwuje krótki czas reakcji (responsive) Te zasady zostały niedawno sformułowane w „manifeście epoki” – Stanowią swojego rodzaju „koncepcyjny” wzorzec projektowy – Istotą jest uwzględnianie powyższych cech od początku tworzenia aplikacji, na jej wszystkich poziomach
  • #5: Reactive Programming nie jest czymś nowym. Jest to sposób w jaki aplikacje używają eventów i reagują na nie. Stąd też nazwa. Jest to coś co robiliśmy do tej pory w aplikacjach frontendowych, ustawiając listenery do eventów. Lub w aplikacjach backendowych reagując na zdarzenia z systemu kolejkującego wiadomości (np. Rabbit MQ) coraz więcej działa w chmurze. Klienci korzystają z WebService’u zleca wykonanie pewnych operacji. Zdalne wywołania trwają dłużej niż lokalne metody, więc często zmuszeni jesteśmy wykonywać je w sposób asynchroniczny. Współczesne języki programowania dają nam mechanizmy, które rozwiązują ten problem. Są nimi wywołania asynchroniczne i eventy. Problem pojawia się, gdy chcemy koordynować kilka jednoczesnych wywołań asynchronicznych. Co w sytuacji, gdy jedna z operacji zostanie anulowana, lub wystąpi nieoczekiwany błąd? Kod realizujący taki scenariusz staje się nieczytelny, a co za tym idzie - trudny w utrzymaniu i testowaniu. Wzorzec Obserwatora: Używany jest do powiadamiania zainteresowanych obiektów o zmianie stanu pewnego innego obiektu. Popularyzacja RP dzięki zapotrzebowaniu na dobre narzędzie do implementowania asynchroniczności w rozbudowanych aplikacjach. Powstało wiele implementacji w różnych językach programowania. Manifest RP Cztery reguły RP: Responsive - Aplikacja responsywna ( nie w kontekście dostosowywania rozmiaru, a w kontekście reagowania na akcje użytkownika i komunikowania) Scalable - wiąże się to ze współdzieleniem zasobów oraz danych. Ściśle związana z Responsive. Resilient - elastyczność - zarówno gdy wszystko idzie zgodnie z planem, ale również gdy pojawiąja się problemy (np. Z zewnętrznymi aplikacjami) Message-driven architecture - podstawa aplikacji RP - w przeciwieństwie do programowania imperatywnego, po wywołaniu funkcji nie musimy czekać na odpowiedź wstrzymując system
  • #6: Spa renderuje się jak aplikacja desktopowa Spa reaguje jak aplikacja desktopowa Spa potrafi informować użytkownika o stanie aplikacji jak aplikacja desktopowa
  • #7: Krok na przód w kierunku kontrolowania flow Zarządzanie błędami - brak
  • #8: Event notifications: yes Managed control flow: noooo Brak zwracanej wartości z callbacka
  • #9: Implementacja stosowana szeroko we współczesnych frameworkach SPA, takich jak AngularJS
  • #10: Minusy: Reprezentuje tylko pojedyncza wartosc Nie da się anulować Lazy execution
  • #11: Paradygmat Observable Programowanie reaktywne to rozszerzenie wzorca Obserwatora Observable object represents a push based collection In reactive programming, all data coming in will be in a stream. These streams can be listened to, modified of course (filtered, merged...), and can even become a new stream that can be listened to. This technique allows for fairly decoupled programs: you don’t have to worry much about the consequences of your method call, you just raise an event, and every part of your app interested in this business will react accordingly. And maybe one of these parts will raise an event also, etc...
  • #12: streams (Node.js), pipes (Unix) or async pipes (Angular 2). Stream jest uporządkowanym zbiorem zdarzeń (eventów) Event reprezentowany jest przez wartości, błędy oraz komunikat zakończenia strumienia. To wszystko pushowane jest od producenta do konsumenta strumienia Stream to OBSERVABLE Listener to OBSERVER Naszym zadaniem jest subskrybcja do strumienia i obsługa tych trzech typów danych
  • #13: Cała potęga w Rx leży w sposobie implementacji i stosowania. Nie tworzymy funkcji, ktore bezpośrednio konsumują rezultat wywołania, a subskrybujemy wybrany strumień danych. Strumienie są lazy. Dopóki nie ma subskrybcji, strumień jest nieaktywny.
  • #14: Observable jest w async tym czym generator w sync
  • #18: http://rxmarbles.com/