Budujesz aplikacje internetowe po stronie serwera czy po stronie klienta czy hybryda? [Zamknięte]

27

Obecnie istnieje wiele metod tworzenia aplikacji internetowych:

1. Tylko po stronie serwera

Jest to klasyczne podejście polegające na renderowaniu stron na serwerze za pomocą frameworka internetowego, takiego jak Ruby on Rails, Django, Express, Play! Ramy i itp.

Typowy obieg pracy : Zbuduj całą logikę biznesową, modele i szablony widoków na serwerze w wybranej przez siebie formie.

2. Po stronie klienta + interfejs API REST

Stosunkowo niedawno jeszcze społeczność internetowa zaczęła budować aplikacje po stronie klienta w Angular, Backbone, Ember i kilkudziesięciu innych frameworkach JavaScript MV *. A teraz mamy także React.js dołączającą do imprezy.

AKTUALIZACJA : Nie ma nieporozumień. To, co miałem na myśli tylko po stronie klienta, to całkowite rozdzielenie obaw. Masz serwer REST API i aplikację kliencką, która komunikuje się z tym serwerem. W zależności od przypadku użycia są szanse, że nigdy nie będziesz mieć aplikacji po stronie klienta, która nie łączy się z zapleczem ani w celu uwierzytelnienia, ani w celu utrwalenia danych.

Typowy przepływ pracy : spędzaj godziny na decydowaniu o Angular vs Backbone vs Ember vs X. Następnie budujesz swoje trasy, modele, widoki, kontrolery na kliencie. Po zakończeniu buduj teraz modele, kontrolery i trasy na serwerze. W pewien sposób wykonujesz podwójną pracę.

3. Hybrydowy

Nie wiem wiele o stosowaniu tego podejścia, ale gdybym zgadywał, renderujesz swoje poglądy (widok frameworka MVC) na serwerze. W rezultacie otrzymujesz wsparcie SEO i szybsze ładowanie strony.

Na froncie Hybrid znajduje się rendr airbnb, który rzekomo łączy ze sobą szkielet i ekspresję.

Eric Florenzo opublikował dziś na swoim blogu: React: Wreszcie wielki stos sieci serwer / klient .

Ilość sposobów tworzenia aplikacji internetowych jest po prostu przytłaczająca. Dla kogoś, kto uczy się tworzenia stron internetowych, może to stanowić problem. Jak decyduje się, jakiego podejścia użyć, aby zbudować kolejną aplikację?

Oceniono R.
źródło
1
„Tylko po stronie klienta: ... Po zakończeniu, teraz buduj modele, kontrolery, trasy na serwerze.” To nie analizuje.
user16764
@ user16764 zaktualizował moje pytanie.
Oceniony R

Odpowiedzi:

13

Myślę, że całkowicie źle zrozumiałeś „Tylko po stronie klienta”.

Po pierwsze, powinien być oznaczony jako „Klient Centric”. Cały ten aspekt frameworków, takich jak Angular, polega na tym, że części „VC” MVC są całkowicie zaimplementowane w przeglądarce w JavaScript. Logika wyższego poziomu „M” części „M” - Model - jest zaimplementowana w przeglądarce, a logika niższego poziomu „CRUD” jest zaimplementowana na serwerze.

Logika biznesowa jest opracowywana raz. Logika widoku jest opracowywana raz. Logika sterowania jest opracowywana raz - wszystko w wybranej strukturze JavaScript. Logika dostępu do danych jest również rozwijana tylko raz, ale tym razem w dowolnej strukturze RESTy lub SOAPy, którą wybierzesz po stronie serwera.

W skrajnych przypadkach możesz zaimplementować Model całkowicie w kliencie, jeśli dopuszczalny jest dostęp do danych tylko z jednej przeglądarki na jednym komputerze i dane są usuwane za każdym razem, gdy wybierana jest opcja „Wyczyść pliki cookie”.

James Anderson
źródło
Naprawdę trudno jest nie rozwinąć przynajmniej częściowo logiki biznesowej. Aby zapewnić wygodę użytkownikom, musisz upewnić się, że użytkownik wprowadzi swój adres e-mail, aby kontynuować. Ale nie możesz ufać klientowi, więc musisz także zaimplementować regułę na serwerze. Przynajmniej mam nadzieję, że nie mówisz, że zaimplementuj logikę biznesową w JS na kliencie.
Andy
@Andy, właśnie o to mi chodzi. Kiedy skompilowałem aplikację Ember, podstawową weryfikację formularza należało wykonać na kliencie, ale także na serwerze. Pewnego razu miałem poważne problemy z tym, że nie sprawdziłem poprawności moich danych na serwerze i całkowicie zaufałem klientowi.
Oceniony R
Andy i inni - spójrz na dokumenty Google. Oprócz ładowania dokumentu, arkusza kalkulacyjnego itp. Z serwera, zapisywania go na końcu i od czasu do czasu wykonywania kopii zapasowej między wszystkimi innymi czynnościami w przeglądarce. Witryna Dokumentów Google działa tylko jako magazyn danych i serwer uwierzytelniania.
James Anderson
3
@JamesAnderson Dokumenty Google różnią się od powiedzmy sklepu internetowego. Edytujesz własny dokument, który jest tylko kroplą danych, które zapisują, nie dbając o to, co one oznaczają. Ale czy naprawdę uważasz, że sprawdzanie poprawności zamówienia powinno być wykonywane TYLKO na kliencie? Prosisz tylko, aby ludzie dawali sobie darmowe produkty, jeśli tak budujesz taką aplikację. Wygląda na to, że zakładasz również, że Google w rzeczywistości nie przeprowadza weryfikacji danych po stronie serwera. Naprawdę nie ma sposobu, aby wiedzieć, co się dzieje.
Andy
9

Odpowiedź na pytanie jest taka, że ​​zależy to od wymagań. Przynajmniej pobieżne spojrzenie na historię rozwoju „sieci” wskazuje na kulturę kowbojską, w której często pomija się rozmowy z interesariuszami, klientami i zbieranie wymagań.

Miałem szczęście, że kilka lat temu wziąłem udział w rozmowie, podczas której usłyszałem coś, co naprawdę mnie utknęło: „wybierasz projekt tak, aby spełniał wymagania, a nie wymagania, aby spełnić projekt”. Dlatego w obliczu takiego pytania musisz dowiedzieć się, czego faktycznie potrzebują ludzie, którzy proszą Cię o zbudowanie tego oprogramowania.

Twoim zadaniem jest wyjaśnienie zalet i wad każdego podejścia.

RibaldEddie
źródło
1
Dzięki. To, co mówisz, ma sens. Miałem nadzieję, że istnieje „srebrna kula”, jeden prawdziwy sposób na robienie rzeczy. Zacząłem od frameworka WWW Python o nazwie Django w 2011 roku. Wkrótce potem nastąpił duży nacisk na frameworki MV * po stronie klienta, takie jak Backbone, Angular, Ember. I nagle sposób budowania aplikacji internetowych przez Rails i Django stał się przestarzały. Ale dzisiaj wydaje się, że robimy krok do tyłu i ponownie łączymy stronę klienta z serwerem, aby osiągnąć lepszą wydajność.
Oceniony R
Niestety nie, nie ma srebrnej kuli. :) Jednak sztuczka polega na tym, aby mieć wystarczające zrozumienie, w jaki sposób elementy pasują do siebie, aby określić najlepsze wyniki dla danego zadania, a także wspierać kulturę bezwzględnego refaktoryzacji, aby zawsze można było zmieniać rzeczy, jeśli początkowy kierunek nie był owocny.
RibaldEddie
1
Jest w porządku i wszystko, ale czasami oba podejścia są wykonalne, w tym przypadku potrzebujesz czegoś innego niż wymóg podjęcia decyzji.
Ced
5

Myślę, że jednym z kluczowych punktów nowszych podejść i ram jest to, że istnieje mniej sprzężenia między technologiami front-end i back-end.

Chodzi o to, że możesz używać dowolnej struktury klienta i pobierać dane i / lub widoki z dowolnej liczby źródeł, niezależnie od struktury po stronie serwera.

To pozwala nam wybrać najlepsze narzędzia do wykonania pracy, a nasze wybory mogą ewoluować niezależnie.

Trzeba przyznać, że nie używałem Angular ani Backbone, więc nie mogę wydawać żadnych doświadczonych rekomendacji. Mój aktualny stos podstawowy składa się z najcieńszego mvc po stronie serwera lub spokojnych usług, jakie mogę znaleźć. Przeważnie dostarcza szablony i dane. Dane są renderowane i / lub kolejne dane są pobierane po stronie klienta przy użyciu głównie zwykłego javascript, jquery i css.

Zaczynam tutaj i bazuję na nim, gdy muszę. Korzyści z tego podejścia są widoczne, gdy myślisz o obsłudze wielu platform klienckich - przeglądarki, telefonu komórkowego itp. Jeśli potrzebujesz renderowania specyficznego dla klienta, nie musisz wprowadzać ogromnych zmian po stronie serwera.

crad
źródło