2009-09-02 8 views
5

Aplikacje internetowe w dzisiejszych czasach szeroko wykorzystują JavaScript, na przykład różne produkty Google, takie jak Gmail i Kalendarz.Czy przetwarzanie Javascript Server-Side rozwiązanie do powielonej logiki?

Mam problemy z tym, jak NIE mieć zduplikowanego serwera logicznego i klienta.

Gdy zażądam strony lub stanu aplikacji, wolałbym wysłać kompletny interfejs użytkownika, co oznacza: nie tylko niektóre javascript, co z kolei tworzy kilkanaście zapytań ajaxowych i buduje interfejs użytkownika.

Ale tutaj leży problem, logika decydowania o tym, co należy pokazać, musi być zapisana raz po stronie serwera i raz w języku po stronie klienta.

Potem zastanawiałem się, czy w jakiś sposób można przetworzyć logikę serwera JavaScript i wysłać całość do klienta, który z kolei może dalej używać aplikacji z wszystkimi zaletami responsywnego interfejsu użytkownika, ale bez wady początkowe ładowanie/budowanie interfejsu użytkownika zależne od żądań ajaxowych w tle.

Mam nadzieję, że wyjaśnienie mojego problemu jest nieco jasne, ponieważ nie jestem najbardziej płynnym pisarzem angielskim. Jeśli rozumiesz, co mam na myśli i jeśli możesz opisać problem nieco lepiej, proszę ... dziękuję!

Więc moje pytanie brzmi:

  • Czy coś jak to możliwe i czy realne?
  • Co sądzisz o tym, jak rozwiązać ten problem?

;-)

Odpowiedz

2

Kiedy uruchomiliśmy naszą aplikację internetową, mieliśmy ten sam rodzaj pytań.
To może pomóc, aby wiedzieć, jak skończyło:

  • backend (logiki biznesowej, bezpieczeństwo) jest całkowicie oddzielony od nakładka (GUI)

  • frontend i backend komunikować się za pośrednictwem usług JSON wyłącznie

  • JSON staje po stronie klienta z biblioteką PURE szablonów

  • i backend í s Erlang (cokolwiek strumieniowego JSON byłoby ok też, ale podobało nam się jego moc)

I za to pytanie, trzeba wziąć pod uwagę przeglądarkę jako całkowicie niebezpieczne.
Cała logika bezpieczeństwa musi pochodzić z zaplecza.

Ukrywanie lub pokazywanie niektórych części ekranu po stronie klienta jest w porządku, ale na pewno backend decyduje, które dane są wysyłane do przeglądarki.

+0

dobre sugestie ... –

1

Wydaje opisać Jaxer Ty możesz napisać wszystko w JS.
Istnieje również GWT, który pozwala napisać całą rzecz na Jawie

+0

To dziwne, ale bardzo interesujące. Czy dużo używałeś Jaxera? Jak ci się podoba? –

+0

Idd GWT jest ankierem Google'a do tego problemu ... –

+0

Nie, nie mam. To jest naprawdę interesujące i mam zamiar eksperymentować z Jaxerem w najbliższej przyszłości (wszystko wokół JS MVC jest dla backendu Przypuszczam, że potrzebuję jakiegoś czeku). Jak rozumiem, nie jest to naprawdę szybkie. Wiesz, JavaScript nie jest szybką technologią, więc nie planuj niczego dużego. –

0

Rozumiem, co mówisz.

Ale nie sądzę, że powinieneś mieć dużo "logiki" na temat tego, co budować, po stronie klienta. Jeśli chciałbyś pójść z modelem, który proponujesz (nie moją filiżanką herbaty, ale dlaczego nie), nie rozumiem, dlaczego skończyłbyś z dużym duplikatem.

Gdzie zwykle wyświetla się table lub div, wystarczy napisać JavaScript, który zbuduje odpowiednie komponenty po stronie klienta.

Uznal bym to za kolejny "widok" w swoim modelu logiki danych/biznesowych.

Czy przedstawiłeś mały przykład problemu, z którym się spotykasz?

+0

cześć, dobrze idd na większości stron internetowych, takich jak stackoverflow, są skoncentrowane na danych i tak naprawdę nie mają tego problemu, ale jeśli chcesz zbudować "prawdziwą" aplikację, jak te używane na pulpicie, takie jak Dokumenty Google itp., I musisz uporczywie wszystko, nadal nie jestem pewien, jakie jest najlepsze podejście, powód tego pytania. txn btw –

1

Potem zastanawiałem się, czy to było jakoś można przetwarzać JavaScript logiki po stronie serwera i wysłać całą do klienta, który z kolei może dalej korzystać z aplikacji z wszystkich zalet responsywny ui, , ale bez wady początkowego ładowania/budowania interfejsu użytkownika zależność od żądań ajaxowych w tle .

Być może aplikacje, na które patrzysz, po prostu źle używają Ajax.

Jedyną zawartością, którą można przetworzyć na serwerze, jest treść, którą użytkownik zna już. Na przykład w aplikacji e-mail możesz wysłać im pełny widok skrzynki odbiorczej, wstępnie przetworzony na serwerze i pobrany z jednym żądaniem, zaraz po zalogowaniu. Ale możesz użyć AJAX, aby pobrać konkretną wiadomość raz oni go klikają. Wysłanie wszystkich wiadomości z góry będzie zbyt wolne.

Użyte poprawnie, AJAX powinien sprawić, że twoje strony będą szybsze , ponieważ może zażądać drobnych aktualizacji lub zmian zawartości bez ponownego ładowania całej strony.

Ale tu tkwi problem, logika decydując co pokazać lub nie musi być napisany raz na stronie serwera i raz w języku po stronie klienta.

Niekoniecznie. Na przykład w PHP możesz napisać funkcję podobną do displayWidgetInfo(). Możesz użyć tej funkcji do wysyłania początkowych informacji o widżecie przy ładowaniu strony. Jeśli użytkownik kliknie widżet, aby coś zmienić, wyślij żądanie AJAX do skryptu PHP, który również używa displayWidgetInfo(), aby wysłać nowe wyniki. Prawie cała twoja logika pozostaje w tej jednej funkcji.

Twoje instynkty są poprawne: złe jest kopiowanie kodu, a wysyłanie zbyt wielu żądań dla jednej strony jest złe.Ale myślę, że możesz naprawić te problemy przy pomocy refaktoryzacji.

+0

kilka dobrych punktów, idd używam ajaxa dla bardziej responsywnego interfejsu użytkownika z powodu częściowych aktualizacji i takich, ale ja bogate aplikacje internetowe, naprawdę trudno jest utrzymać logikę oddzielnie, niech serwer ma logikę do umieszczaj pewne widżety na stronie w odpowiedniej kolejności, a klient potrzebuje podobnego kodu do obsługi repozycjonowania widżetów ... jeśli trochę rozumiem o co mi chodzi :-) txn btw –

+0

mój Boże, tyle literówek, przepraszam naprawdę ... –

0

Rozumiem twoje pytanie w ten sposób: Załóżmy, że mamy formularz HTML na stronie internetowej. Jest pole dla imienia i nazwiska. Musimy sprawdzić poprawność zarówno po stronie klienta (z JS), jak i po stronie Sever (na skrypcie php podczas przetwarzania danych wejściowych formularza). A więc tutaj jest duplikacja - sprawdzanie regex po obu stronach. Jaki jest więc sposób, aby temu zapobiec i pogodzić te logiki?

Powiązane problemy