ݺߣ

ݺߣShare a Scribd company logo
Architektura aplikacji
przeglądarkowych w
oparciu o lokalną
komunikację pomiędzy
wieloma dokumentami
(a.k.a. Muszę popracować nad tytułami)
HELLO!Sebastian Rosik
If you’re reading this, you can tweet to me at @sebastianrosik
Czego się spodziewać?
● Przegląd możliwości przeglądarek
● Czym się różnią, jakie są ich mocne i słabe strony?
● Nie będę wchodził w szczegóły
● Nie będzie kodu
○ (no może jedna linia)
Co jest czym?
Legenda
Iframe zakładka okno
dokument
Co się z czym komunikuje?
Legenda
frontend backend
User 1
User 2
User 3
frontend backend
User 1
User 2
User 3
frontend backend
User 1
User 2
User 3
frontend backend
User 1
User 2
User 3
Problem z życia
wzięty
25 PLN 132 PLN 2,5 PLN
25 PLN 132 PLN 2,5 PLN
Sklep 0
Problem z życia
wzięty
Fajny ciuch #1 0
25 PLN
Dodaj do koszyka
Fajny ciuch #1 0
25 PLN
Dodaj do koszyka
Fajny ciuch #1 0
25 PLN
Dodaj do koszyka25 PLN 132 PLN 2,5 PLN
25 PLN 132 PLN 2,5 PLN
Sklep 0
Fajny ciuch #1 0
25 PLN
Dodaj do koszyka
Fajny ciuch #1 0
25 PLN
Dodaj do koszyka
25 PLN 132 PLN 2,5 PLN
25 PLN 132 PLN 2,5 PLN
Sklep 0
Fajny ciuch #1 0
25 PLN
Dodaj do koszyka
Fajny ciuch #1 0
25 PLN
Dodaj do koszyka
Fajny ciuch #1 0
25 PLN
Dodaj do koszyka
25 PLN 132 PLN 2,5 PLN
25 PLN 132 PLN 2,5 PLN
Sklep 0
Fajny ciuch #1 1
25 PLN
Dodaj do koszyka
Fajny ciuch #2 0
25 PLN
Dodaj do koszyka
Fajny ciuch #1 0
25 PLN
Dodaj do koszyka
25 PLN 132 PLN 2,5 PLN
25 PLN 132 PLN 2,5 PLN
Sklep 0
Fajny ciuch #1 1
25 PLN
Dodaj do koszyka
Fajny ciuch #2 0
25 PLN
Dodaj do koszyka
Na ile sposobów
możemy wysłać
wiadomośc do innego
dokumentu?
To zależy
● Od przeglądarek w jakie celujemy i czy
dane rozwiązanie jest na nie dostępne.
● Od naszej potrzeby.
● Co akceptujemy jako poprawne
rozwiązanie a co jako hack?
BACKEND
frontend backend
C
Wymiana wiadomości
poprzez backend
BA
WebSocket
frontend backend
Wymiana wiadomości
poprzez backend
CBA
frontend backend
CBA
MESSAGEBUS
Wymiana wiadomości
poprzez backend
Wymiana wiadomości
poprzez backend
● Kwestia odpowiedzialności
○ Czy backend powinien wiedzieć o
stanie UI?
● Koszta utrzymania infrastruktury
Rozwiązania backendowe
Pros
● Elastyczne rozwiązanie
● Działa z każdą
przeglądarką
Cons
● Kosztuje nas pieniądze
● To może być overkill dla
małych potrzeb
FRONTEND
FRONTEND
http://shop.com
http://shop.com
frontend backend
window.postMessage
Komunikacja pomiędzy dokumentami w relacji rodzic-
dziecko, które mogą znajdować się pod różnymi domenami.
Document w relacji
Referencja do innego dokumentu uzyskana przez
window.open() lub poprzez osadzenie innego
dokumentu w IFRAME.
http://shop.com
http://external.net
http://shop.com
Pop up Embedded
document
window.postMessage
● Musimy sprawdzić pochodzenie każdej odebranej wiadomości.
● Problem bezpieczeństwa.
Channel Messaging API
Channel Messaging API
Komunikacja z pomiędzy dokumentami w tej samej lokacji
(origin)
Channel Messaging API
http://shop.com
http://external.net
http://shop.com
Channel Messaging API
● Musimy posiadać referencje do dokumentu
● Do dyspozycji dwa powiązane porty. Jeden transferujemy do
drugiego okna.
● Tylko dwa dokumenty mogą ze sobą rozmawiać
Broadcast Channel API
Broadcast Channel API
It allows communication between different documents
(in different windows, tabs, frames or iframes)
of the same origin
Broadcast Channel API
http://shop.com
my_channel
http://shop.com
Brak relacji
pomiędzy
dokumentami.
Ten sam origin.
my _channel
my _channel
my _channel
Broadcast Channel API
● pub/sub
● Jedna instancja to jeden kanał o konkretnej nazwie
● Tylko same-origin
window.postMessage
Channel Messaging API
Broadcast Channel API
Podsumowanie
Channel Messaging API
● Cross domain
● Tylko dokumenty z relacją rodzic-dziecko
● Transfer portów komunikacyjnych
Broadcast Channel API
● Only same domain
● Full-duplex dla nasłuchujących na
kanale dokumentów
window.postMessage
● Cross domain
● Tylko dokumenty z relacją rodzic-dziecko
● Oparte na zdarzeniach, bez portów
● Wiadomości potencjalne niebezpieczne
Istnieją też inne
rozwiązania*
*są straszne. Brrrr.
LocalStorage
Komunikacja poprzez zapis wiadomości do Storage.
Pozostałe dokumentu otrzymują zdarzenie o zapisie do
Storage i mogą odczytać wiadomość.
Somewhat hackish solution™
LocalStorage
● Każdy załączony skrypt ma dostęp do LS co my
○ A więc może wyczyścić nam Storage
● Ograniczona przestrzeń współdzielona z innymi danymi
● Czy to jest jego odpowiedzialność?
LocalStorage
http://shop.com
http://shop.com
http://shop.com
localStorage
Coś po za
localStorage?
Ciastka!
● Dostępne w każdej przeglądarce
● Niestety mała przestrzeń
● Ale za to można też przesłać wiadomość do serwera…
● ...nie no, żartuję.
To hackish, DON’T DO IT
Dzieki!Pytania?
sebastian.rosik@rst.com.pl
Bonus
ServiceWorker
https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API

More Related Content

Sebastian Rosik: Architektura aplikacji przeglądarkowych w oparciu o lokalną komunikację pomiędzy wieloma dokumentami - RST CodeMeeting

Editor's Notes

  • #11: Typ komunikacji, który jest głównie skierowany w stronę rozwiązanie problemów użyteczności naszej aplikacji.
  • #44: Opowiedzieć o WebMessengerze.
  • #49: Opowiedzieć o WebMessengerze.