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:
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
- Całe mnóstwo subiektywnych opinii na temat kształtowania aplikacji:
http://lmgtfy.com/?q=meteor+boilerplate - Porównanie kilku podejść: In Search of a Meteor Boilerplate
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ę renderowaniem ale 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:
- Routing Guide for Meteor Apps - dobrze napisany poradnik od autora FR
- Wątek na forum: IR vs FR
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
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
- Collection2 / SimpleSchema
- UniCollection (kryptoreklama! :))
- Astronomy
- MiniMongoid
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