Sails.js vs Meteor - Jakie są zalety obu? [Zamknięte]

81

Dużo czytałem o Nodejs i jego frameworkach, a ostatnio ukończyłem moją pierwszą pełną nakładkę na javascript (używając Angularjs).

Zdecydowałem, że mój następny projekt dla zwierzaków będzie przygodą Nodejs przy użyciu jednego z tych dwóch frameworków:

Czytałem o obu, ale nadal nie do końca rozumiem ich różnice i dlaczego powinienem wybrać jedno nad drugim. Więc proszę, załóż swój najlepszy kapelusz sprzedawcy, wybierz ramę i sprzedaj mi.

Niektóre funkcje, których potrzebuję do mojego projektu zwierzaka to:

  • Wyniki na żywo
  • Wątki podobne do Reddita, w czasie rzeczywistym
  • Edycja strony podobna do Wikipedii
  • Użytkownicy / role
pedropeixoto
źródło
1
Sprawdź ten link: vschart.com/compare/meteor-web-framework/vs/sails-js . To może ci pomóc !!
tuchi35

Odpowiedzi:

138

Nie mogę wypowiadać się w imieniu Meteor, ale mogę pomóc w przedstawieniu informacji o Sailsach, ponieważ je stworzyłem.

tldr; Sails nie jest panaceum na wszystkie problemy w sieci - ale uważam, że Node.js tak. Celem Sails jest zapewnienie praktycznej struktury do tworzenia kompletnych, skalowalnych, przyjaznych dla początkujących i przyjaznych dla przedsiębiorstw aplikacji opartych na node.js. Zacząłem Balderdash od pytania „Czy możemy używać Node.js do wszystkiego?”. Odpowiedzią są żagle.


Z naszych nowych dokumentów :

Sails to oczywiście framework sieciowy. Ale cofnij się o krok. Co to znaczy? Czasami, gdy mówimy o „sieci”, mamy na myśli „sieć zewnętrzną”. Myślimy o pojęciach takich jak standardy sieciowe lub HTML 5 lub CSS 3; i frameworki, takie jak Backbone, Angular lub jQuery. Żagle nie są „tego rodzaju” frameworkiem sieciowym. Sails działa świetnie z Angular i Backbone, ale nigdy nie używałbyś Sails zamiast tych bibliotek.

Z drugiej strony, czasami, gdy mówimy o „platformach internetowych”, mamy na myśli „sieć zaplecza”. To wywołuje koncepcje takie jak REST, HTTP lub WebSockets; i jest oparty na technologiach takich jak Java, Ruby lub Node.js. Struktura „zaplecza internetowego” ułatwia tworzenie takich funkcji, jak tworzenie interfejsów API, interakcję z bazami danych, obsługę plików HTML i obsługę setek tysięcy jednoczesnych użytkowników. Sails to „tego rodzaju” framework sieciowy.

Kilka lat temu zobowiązałem się używać Node.js do wszystkiego - to była miłość od pierwszego wejrzenia . Zbudowałem Sails na Express i Socket.io ponieważ były (i nadal są) najbardziej ugruntowanymi modułami Node w swoich przypadkach użycia. Kod obsługi żądań w Sails jest zgodny z Express, z dodatkową zaletą niejawnej obsługi Socket.io.

Sails jest zaprojektowany tak, aby był kompatybilny z dowolną strategią budowania front-endu (-ów) w Angular, Backbone, iOS / ObjC, Android / Java, a nawet oferując surowy interfejs API do wykorzystania przez inną usługę internetową lub społeczność programistów. Jeśli w końcu zmienisz swoje podejście (np. Przejdziesz z Backbone na Angular) lub całkowicie zbudujesz nowy front-end (np. Zbudujesz natywną aplikację na Windows Phone), Twoja aplikacja Sails będzie nadal działać. Jak być może już wiesz, niektórzy nazywają to podejście architekturą zorientowaną na usługi lub SOA ( Joe McCann ma świetną prezentację na ten temat).

Z tego samego powodu Sails zachowuje inne znane konwencje tworzenia serwerów internetowych - standardową strukturę MVC, możliwość tworzenia czystych interfejsów API i podstawowych modułów, które są otwarte, konfigurowalne, rozszerzalne, a nawet wymienialne. Oznacza to, że żagle można dostosować do potrzeb użytkowników na tak niskim poziomie, jak jest to konieczne.

W 2013 r. Popularność platformy znacznie wzrosła, a nasza działalność konsultingowa wzrosła. Reszta głównych opiekunów i ja rozszerzyliśmy naszą koncentrację na jak najszybszym i najprostszym tworzeniu zaplecza. Powiązane aspekty Sails, takie jak haczyki (wtyczki), testowanie i dokumentacja, przeszły długą drogę w ciągu ostatniego roku dzięki wysiłkom zarówno naszego podstawowego zespołu, jak i (stale rozwijającej się) społeczności Sails. Jest wiele elementów z map drogowych, nad którymi nadal pracujemy, ale uważam, że Sails jest obecnie najlepszą opcją do stabilnego, łatwego w utrzymaniu rozwoju MVC w Node. Reszta zespołu i ja jesteśmy zaangażowani w jego ciągłe utrzymanie i rozwój funkcji, a ponieważ używamy go we wszystkich naszych projektach klientów, nigdzie się nie wybiera.

Jestem całkowicie przekonany, że Sails będzie najlepszym frameworkiem internetowym, ale nigdy kosztem Node.js. Główny zespół i ja jesteśmy nieustannie oddani ulepszaniu ekosystemu Node, a to oznacza przyjęcie NPM, wykorzystanie istniejących technologii Node i najlepszych praktyk itp. Nie tylko dlatego, że ma to większy sens, ale dlatego, że jesteśmy programistami Node.js. Motywacją do wszystkich naszych wysiłków jest uczynienie Node bardziej dostępnym, a nie zastępowanie go. Tak więc, jeśli w jakimś dziwnym, równoległym wszechświecie, miałbym faustowski wybór między konwersją Sails na inny język lub całkowitym porzuceniem Sails, ale wciąż mogąc używać Node, wybrałbym to drugie.


Dodatkowe zasoby:

FAQ | Żagle 101 | Oryginalny screencast | Przewodnik po wkładach | Przepełnienie stosu

Grupa Google | Mapa drogowa | IRC: #sailsjs na Freenode | Stan kompilacji

mikermcneil
źródło
2
Tutaj
znalazłem
@AaronShafovaloff dzięki za wszystko - oto zaktualizowany link: sailsjs.org/get-started
mikermcneil
30

Zbudowałem kilka projektów z Meteor i nie pracowałem jeszcze z Sails. Więc moja opinia będzie z pewnością stronnicza, mam nadzieję, że i tak będzie pomocna.

Budowanie front-endu

Meteor zapewnia własny front-end framework o nazwie Blaze - który zostanie dołączony do nadchodzącej wersji 0.8. Meteor dba o powiązanie danych z Twoich kolekcji z Twoimi widokami. Z tego powodu nie musisz się martwić o nakazanie swoim widokom aktualizacji, po prostu to robią.

Z drugiej strony Sails zapewnia tylko strukturę zaplecza i będziesz musiał przynieść własną strukturę front-end.

W przeciwieństwie do większości frameworków Node.js, Meteor jest synchroniczny

Meteor działa w pętli i jeśli chcesz korzystać z pakietów Node.js, będziesz musiał wykonać dodatkową pracę, aby upewnić się, że działają poprawnie w Meteor.

Sails wydaje się być prostym frameworkiem MVC Node.js, więc nie powinno być nic zbyt zaskakującego, gdy się do niego przyjrzysz.

Powinieneś używać MongoDB z Meteor

Tak, możesz korzystać z innych baz danych z Meteor, ale nie mają one podobnego wsparcia jak MongoDB. Podczas gdy w przypadku Sails wygląda na to, że mają ORMy dla kilku baz danych.

Wydajność

W przypadku zastosowań na dużą skalę Meteor może nie działać dobrze . Trwa wiele pracy, aby rozwiązać ten problem i do końca 2014 roku możemy spodziewać się skalowania rozwiązań dla Meteor.

Stabilność

Meteor jest wciąż bardzo świeży i jeszcze nie osiągnął 1.0. Należy spodziewać się wprowadzenia pewnych zmian w następnych kilku wydaniach, które zerwą wsteczną kompatybilność. Jeśli zaczynasz z nim jak najszybciej, możesz rozważyć użycie gałęzi 0.8-rc0. Biorąc to pod uwagę, niektóre funkcje w przygotowaniu są naprawdę świetne i sprawią, że wersja 1.0 będzie bardzo kusząca.

Końcowe przemyślenia?

Lubię Meteor ze względu na jego dziwactwa. Będziesz musiał nauczyć się robienia rzeczy w Meteor, ale kiedy zaczniesz to robić, poczujesz, że wypiłeś pomoc kool. Ze względu na sposób, w jaki dane są powiązane z widokami, linie między serwerem a klientem nie są odległe. Meteor reprezentuje zmianę paradygmatu w architekturze aplikacji i jeśli jeszcze go nie wypróbowałeś, poleciłbym go.

PS Zapoznaj się z mapą drogową, aby poczuć, co się wydarzy.

MSaforrian
źródło
5
Proponuję zmodyfikować stwierdzenie „meteor is synchronous”, ponieważ może to dać złe wrażenie osobom niezaznajomionym z włóknami nodejs. Meteor działa na Node.js, więc nadal uzyskujesz jego nieblokujące korzyści oparte na zdarzeniach. Meteor w przejrzysty sposób integruje włókna węzłowe, dzięki czemu kod po stronie serwera może być napisany w liniowym modelu wykonania, zamiast dzielić rzeczy na tradycyjne wywołania zwrotne. To jest prawdopodobnie najlepsza wzmianka o używaniu npmpakietów z meteor: meteorhacks.com/complete-npm-integration-for-meteor.html
alanning
Dzięki Alanning, dołączę Twoją opinię do tej odpowiedzi!
MSaforrian
8
Może jedną ważną rzeczą jest to, że sails.js jest przeznaczony tylko dla zaplecza, podczas gdy meteor oferuje cały front-endowy framework javascript do łatwej pracy z backendem.
Michael,
Dzięki, że o tym wspomniałeś, @Michael. Sails.js i Meteor tak naprawdę nie konkurują - Sails.js to framework backendowy dla Node.js, którego możesz użyć zamiast czegoś takiego jak Django, Rails, Express itp., Podczas gdy Meteor to nowy sposób myślenia o tym, jak budować aplikacje biernej góry do dołu - co moim zdaniem jest naprawdę fajne :) btw
mikermcneil
Czy chciałbyś zaktualizować swój komentarz, skoro minęły ponad 4 lata od Twojej recenzji? Z pewnością chciałbym poznać opinię na temat nowego meteorytu zmieniającego zasady gry 1.7 ..
Shyam
19

Mogę tylko wypowiedzieć się na temat żagli. Jestem niezwykle doświadczonym programistą Javascript i od lat 90-tych tworzę wbudowane aplikacje do dekoderów oparte na Javascript.

Rzeczy, które działały naprawdę dobrze - Pierwsze kroki były świetne i czułem się bardzo wspierany przez opublikowane materiały - Krzywa uczenia się była bardzo krótka, a za żaglami jest zdrowa społeczność - Po początkowej nauce bardzo łatwo jest szybko być kreatywnym

Rzeczy, które można by poprawić - Złożone struktury danych są trudne do wdrożenia - Integracja Passport.js była bolesna, ponieważ nie ma czystych materiałów referencyjnych

Zalecenia - koder Ponzi ma świetny samouczek i naprawdę pomógł mi w rozpoczęciu https://www.youtube.com/user/ponzicoder - Wiedza o ekspresach i wodnicach pomoże, gdy podejmiesz bardziej złożone wyzwania związane z danymi

Ogólnie polecam żagle.

simondelliott
źródło
1
Cześć simon, czy mógłbyś podzielić się, jak udało ci się zintegrować paszport z żaglami? Utknąłem w tym samym problemie. Prowadziłeś gdzieś blog lub masz jakieś materiały referencyjne?
Mitermayer Reis
2
Cześć Mitermayer, przepraszam, ale mój blog umarł z powodu zaniedbania dawno temu. To, co sprawiło, że paszport działał dla mnie, to uświadomienie sobie, że jeśli zrobiłem dwie rzeczy, wydawało się, że działa dobrze. 1 domyślne nazwy pól wszędzie (adres e-mail i hasło) 2 przekaż obiekt req do wywołania zwrotnego passport.use('local-login', new LocalStrategy({ usernameField : 'email', passwordField : 'password', passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not) },
simondelliott
1
Wow, dziękuję. Od wielu dni mam problemy z lokalną strategią. To zasługuje na swój własny post po przepełnieniu stosu
light24bulbs
1
Integracja Passport.js rzeczywiście wymaga więcej materiałów dokumentacyjnych, nie można tego wystarczająco podkreślić. Specjalnie dla przypadku użycia REST API, w którym nie odbywa się renderowanie serwera (na przykład dla kątowych klientów JS), łącząc logowanie Facebook / Google i lokalne uwierzytelnianie.
Alon Amir
1
Głosuj za Passport.js, który jest trudny do zintegrowania i słabo udokumentowany
pim
9

Obecnie używam Meteor i nie używałem Sails.js.

Praca z Meteor była niezwykle przyjemna i myślę, że byłby to doskonały wybór dla aplikacji internetowych działających w czasie rzeczywistym. Jeśli chodzi o użytkowników / role, możesz sprawdzić zintegrowany pakiet kont , a także przeszukać Atmosferę pod kątem ról / pakietów uprawnień wniesionych przez społeczność.

Ostatecznie polecam wypróbowanie małego projektu z obiema technologiami i zobaczenie, które lubisz bardziej.

alanning
źródło
Czy wiesz, czy Sail.js ma jakąś odmianę kompensacji opóźnienia po stronie klienta, podobną do kompensacji opóźnienia Meteor na poziomie modelu?
imslavko
Nie wiem o Sail.js, ale prawdopodobnie możesz dołączyć go samodzielnie, korzystając z biblioteki sharejs.org . Tak przynajmniej wydaje się być celem lib.
alanning
1
@alanning - nie, sharejs nie kompensuje opóźnienia. Sharejs wykonuje transformacje operacyjne. Kompensacja opóźnienia ma miejsce, gdy Meteor dokona aktualizacji swojego lokalnego minimongo i przyjmie, że zdalna aktualizacja zakończy się powodzeniem, umożliwiając użytkownikowi kontynuację.
gomad
1
@gomad, masz rację, że sharejs nie zapewnia kompensacji opóźnienia po wyjęciu z pudełka. Nie powiedziałem, że tak. Powiedziałem raczej: „Prawdopodobnie możesz dołączyć to samodzielnie, używając sharejs.org”. LC jest zbudowany na OT.
alanning
Tylko dodatkowa uwaga. Myślę, że meteor jest bardzo przyjemny w użyciu. Jest trochę krzywej uczenia się, ale poza tym szkielet jest bardzo podobny do tego, jak można opisać szyny do ruby. Obecnie moim jedynym problemem jest to, że nadal zależy to od węzła 0.10.40, jeśli chcesz hostować samodzielnie. Ponieważ meteor ma dość dużą bazę, uważam, że gra nadrabiania zaległości z node jest trochę niesprawiedliwa dla meteor.
Jimmy MG Lim