Vazco Bootcamp

Szkolenie Meteor, dzień 3

Maciej Stasiełuk, Vazco.eu

17.08.15

Plan szkolenia

Dobre praktyki, zalety i wady różnych rozwiązań
na bazie naszych doświadczeń w pracy z Meteorem:

  • Struktura plików i katalogów
  • Routing
  • Wydajność i skalowalność
  • Debugging
  • System paczek i praca z Atmosferą
  • Prekompilatory
  • View: Blaze vs React vs Angular
  • Model: Kolekcje

* Treści prezentowane na tym szkoleniu mają charakter mocno subiektywny i nie muszą być najlepszą opcją dla każdej aplikacji.
Powstały na bazie prawie 2 letniej komercyjnej pracy z Meteorem i kilku produkcyjnych wdrożeniach.
Skoro sprawdzają się dla nas jest też duża szansa że sprawdzą się u was, ale zawsze należy mieć otwarty umysł :)

Struktura plików i katalogów

  • Wszystko w aplikacji
  • Wszystko w paczkach
  • Tryb mieszany
  • Różne boilerplaits
  • universe:modules (kryptoreklama alert!)

Wszystko w aplikacji

  • Cały kod trzymamy w głównej części aplikacji
  • Jedyne paczki jakie podłączamy to te z atmosfery
  • Automatycznie ładowane pliki
  • Dobre do małych szybkich projektów
  • Wymaga konsekwencji inaczej szybko zrobi się bałagan

Całość aplikacji w paczkach

Temat bardzo dobrze wyczerpuje seria autorstwa Wojciecha Krysiaka - zagorzałego promotora takiego podejścia:

  1. Package for everything
  2. Testing Meteor packages (for humans)
  3. Continuous Integration and Delivery of your Meteor “package for everything” project.

Tryb mieszany

  • Kod specyficzny dla aplikacji trzymamy w części aplikacyjnej (kod miękki)
  • Kod który chcemy używać pomiędzy kilkoma projektami trzymamy w paczkach (kod twardy)
  • Najlepsze z dwóch światów
  • Dalej wymaga konsekwencji inaczej zrobi się bałagan

Boilerplates

Universe Modules

  • System który wykorzystujemy obecnie do budowania nowych aplikacji
  • Składnia ES2015
  • Każdy plik jest osobny modułem ładowanym na życzenie
  • Poprawia czytelność
  • Nie zaśmieca globalnego scope

Routing

  • Iron Router
  • Flow Router
  • Reaktor

+ Nadal najpopularniejszy

+ Duża ilość współpracujących paczek

+ Dobrze udokumentowany

+ Najbardziej dojrzały projekt

 

- Robi trochę za dużo, m.in również renderowanie

- Współpracuje tylko z Blaze

- Prawie wszystko jest reaktywne

- Ostatnio mało aktywnie rozwijany

+ Dobrze zrobiona architektura

+ Najbardziej "trendy" w chwili obecnej

+ Dobrze udokumentowany

+ Reaktywne jest tylko to co powinno być reaktywne

+ Niedługo wsparcie dla prawdziwego SSR

Nie zajmuje się renderowanieale zamiast tego pokazuje jak użyć do tego dedykowanych paczek np. BlazeLayout i ReactLayout

 

- Nie możemy używać paczek dedykowanych dla IR

- Wciąż młody projekt

Nakładka na Flow Router umożliwiająca budowanie routów w sposób znany z ReactRoutera

Dla dociekliwych:

Wydajność i skalowalność

Pod spodem mamy dalej node.js wraz z Mongo i ich ograniczeniami.

 

Standardowy model to:

  • Nginx (ew. HaProxy itp.)
  • Wiele serwerów Meteor
  • MongoDB replica sets

Istnieją też ciekawe rozwiązania pokroju Meteor Cluster

 

Skalowalność jest zależna od konkretnego przypadku.

Classcraft: 200 osób per procesor / 6400 per serwer

Dla dociekliwych:

Debugging

Klient:

Chrome Developer Tools

 

Server:

meteor debug
meteor shell

 

W produkcji:

Kadira

Dla dociekliwych:

Atmosfera

  • Na co zwracać uwagę szukając paczki?
  • Czy i jak publikować swoje paczki?

Prekompilatory

  • CoffeeScript
  • TypeScript
  • Babel / ecmascript

 

  • Less
  • Stylus
  • Sass / scss

Frontend

  • Blaze
  • React
  • Angular

Zalety React w stosunku do Blaze

  • Wymusza sposób budowania komponentów
  • Interfejs jest bardziej przewidywalny - mniej błędów
  • Podejście zaczerpnięte z programowania funkcyjnego: czystość funkcyjna komponentów, ich kompozycja
  • Unikanie "side-effektów"
  • Przepływ danych w jednym kierunku - "w dół"
  • Łatwiejsze testowanie
  • Możliwy Server Side Rendering
  • Większa wydajność dzięki zastosowaniu Virtual DOM (aczkolwiek Blaze też jest szybki!)
  • Dostępne są często już gotowe komponenty
  • React Native - teoretycznie możliwa budowa natywnych aplikacji mobilnych

Wady React w stosunku do Blaze

  • Wymusza sposób budowania komponentów
  • Wprowadza pewien dodatkowy stopień skomplikowania który nie jest zawsze konieczny
  • Wymaga nauki nowej technologii, dodatkowo dochodzi JSX i WTF :)
  • Często odcięcie się od gotowych paczek dostępnych na atmosferze
  • Blaze jest stworzony dla i z myślą o Meteorze

Przepływ danych

Modele i zarządzanie kolekcjami

Universe Collection

  • "Kolekcje na sterydach"
  • Helpery na dokumentach
  • Łatwo rozszerzalne
  • Możliwość edycji z poziomu dokumentu
  • Hooki na akcjach (insert, update, remove, find)
  • Wsparcie dla EJSON
  • Działa również na kolekcji users
  • Niedługo: mixiny

Pytania?

VazcoBootcamp: Szkolenie III

By Maciej

VazcoBootcamp: Szkolenie III

  • 1,172