Dev zbliża się kompleks JavaScript UI [zamknięte]

19

Próbuję zrozumieć krajobraz różnych metod oraz najlepszych praktyk, wokół rozwoju złożone po stronie klienta JavaScript.

Nie jestem pewien, co do oznaczania tej klasy aplikacji, a może ciężki AJAX lub RIA (ale nie wtyczek takich jak Flash / Silverlight). Mam na myśli aplikacji internetowych z tych cech:

  • Emulate bogaty / rodzimy pulpit UX w JavaScript
  • Zawierają większość / wszystkie zachowanie w JS po stronie klienta, korzystając z serwera jako data-API (JSON / HTML szablony).

Jest to w przeciwieństwie do korzystania z serwera WWW dla renderowania UI, produkujących wszystkie HTML w modelu strona odświeżania.

Oto niektóre przykłady:

  • Dokumenty Google / Gmail
  • Mindmeister
  • Pivotal Tracker

Gdy przechodzimy do HTML5, widzę ten styl rozwoju RIA z silnym JavaScript, który staje się coraz bardziej powszechny i ​​niezbędny do konkurowania.

PYTANIE: Jakie są więc wspólne podejście pojawiających się wokół zarządzania tego rodzaju ciężkich JS rozwoju?

kod po stronie klienta, jak aplikacja rośnie w funkcji, jest piekielnie skomplikowana. Są problemy skalowania wysiłków na rzecz rozwoju w wielu zespołach z surowego JS (lub tak słyszę, i może dobrze to uwierzyć).

Google podszedł do problemu, budując GWT, który kompiluje z języka wyższego poziomu (Java) do JS, bazując na istniejącej infrastrukturze programistycznej, którą posiada język wyższego poziomu (Eclipse, narzędzia do silnego pisania, refaktoryzacji), a także abstrakcyjnie kompatybilność przeglądarki i inne problemy z dala od programisty.

Są też inne narzędzia, takie jak Script # dla C #, które robią coś podobnego. Wszystkie te JS stawia bardziej w roli IL (Intermediate Language). to znaczy. „Nigdy naprawdę pisać w tym języku niskiego poziomu«»już.”

Ale ta „kompilacji do JS” nie jest jedynym rozwiązaniem. To nie jest oczywiste, że GWT jest dominującym podejściem ... czy rzeczywiście będzie go stać.

Co ludzie robią z bogatych klienta JavaScript? Niektóre pytania orientowania:

  • Czy większość sklepów rzemiosła ręcznego JS (jQuery szczycie libs jak inni)?
  • Czy są tam wiele wiele różnych podejść, bez wyraźnego najlepszych praktyk pojawiających?
  • Czy większość sklepów unikanie rozwój skalę RIA na korzyść prostsze programista po stronie serwera / model widoku-przerysem? Jeśli tak, to potrwa?
  • Kompiluje do JS może nowy trend przyszłość? Czy jest to po prostu źle na czele?
  • Jak zarządzać ich złożoność i refactoring klienta JS?
  • Modularyzacja i podział pracy między zespołami?
  • Aplikacja, wykonanie i testowanie wzorów po stronie klienta, jak MVC / MVP itd.

Więc, jakie są pojawiające się trendy w tej przyszłości grubym JavaScript i HTML5 z naszych?

Dzięki!

Phil Cockfield
źródło
Zimbra opiera się głównie na js po stronie klienta do emulowania środowisk graficznych.
frogstarr78
Dzięki. Czy wiesz, jak rozwijają swoje JS? Ręcznie wykonane, czy narzędzia na wyższym poziomie?
Phil Cockfield,
To odpowiedź na podobne pytanie podsumowuje opcje całkiem dobrze: stackoverflow.com/questions/218699/...
Victor Sorokin
1
Google+ jest użycie ciężkiego GWT wierzę (co jest oczekiwane ... skoro to od Google)
jamiebarrow
Szkoda ta kwestia została zamknięta :( ... IMHO powinno zostać wznowione
dagnelies

Odpowiedzi:

6

Większość aplikacji internetowych widzę (i Web deweloperów Rozmawiałem), którzy idą w tym kierunku są przy użyciu jQuery jako swojej bazy.

Całe rozumowanie za GWT (i podobnych języków wielopoziomowe) jest to, że JavaScript jest zbyt nierówne / zbyt kruche / zbyt zmienny dla „prawdziwych programistów” do użytku. Ale jeśli masz ramy magazynowe na nierówne / kruchych / zmienne bitów dla ciebie, to nie ma powodu, aby dodać na tej dodatkowej warstwy złożoności.

Tylko moja opinia…

Dori
źródło
Kindof wątpię, że każdy można zorganizować można wyjąć „kruchość” Javascript jest. To dynamiczny charakter sprawia, że bardzo trudno jest zapewnić spójność i skłonność do błędów runtime. Wystarczy, że atrybut json został przemianowany gdzieś i nie repercuted całą drogę w dół do zerwania rzeczy. ... Nie jest to problem z typowymi małymi skryptami, ale w złożonej RIA z tysiącami LOC może się to szybko zdarzyć i szybko pozostać niezauważonym. Żadne ramy nie są w stanie tego uniknąć.
Dagnelies
5

Powiedziałbym, że GWT jest ryzykowne. Gdy zdecydujesz się go użyć, utkniesz z nim. Zasadniczo oznacza to, że można traktować znaczników, DOM i niektóre aspekty CSS jako środowisko wykonania. Robi się naprawdę trudno mieszać ręcznie napisany JavaScript z GWT jak Twój kod klienta staje się coraz bardziej wyrafinowane. GWT ma metod rodzimych ale te są dość ograniczone pod względem ewentualnego zastosowania. To duży kompromis i to jest duży zakład.

Google stara się sprzedać GWT jako bardzo szybka realizacja środowisku X-platformowa z przyzwoitej integracji po stronie serwera. Ale jak inni już wspomniano to już nie przypadek - YUI JQuery i nie są tak szybko, szybciej, jeśli. I to o wiele łatwiejsze do profilu i optymalizacji stron, gdy są montowane ręcznie więc masz pełną kontrolę nad CSS, znaczników i JavaScript.

GWT próbuje ukryć poniżej platforma z was, które mogą rzeczywiście być niewłaściwy sposób, aby robić różne rzeczy. Wiele tak zwanych składowymi internetowych ram zrobił to samo. Miałeś napisać niejednoznaczne XML pochodzący kod z EL i znaczniki niestandardowe wrzucony. Wyjście byłby bałagan słabo HTML utworzonego z małych kawałków brzydko JavaScript posypane wszędzie. Strony były powolne, buggy i całkowicie unmaintainable.

W naszym obecnym projekcie używamy Stripes - ramy niskiego poziomu działania opartego, - i jQuery na stronie klienta. Jest to bardzo proste do zrobienia Ajax raz wyraźnie zobaczyć wszystkie kawałki układanki: oto kod po stronie serwera, który operuje na danych. Oto kod po stronie klienta - w przypadku pobierania danych i dokonywania rzeczy dzieją się na Strony. Oto twój CSS, oto Twój znaczników, oto twój szablonów - wszystko jest czyste i oddzielone. Łatwo rozszerzalny, hackable, przestrajanie i debuggable. Kocham to.

Kocham JQuery z jego postawy wobec szybkości i prostoty. Kocham YUI3 na modułowości i kompleksowych widgetów. Kocham YUI CSS za udzielenie mi spójność różnych przeglądarkach. Uwielbiam JavaScript dla dobrych części. Kocham Java za poinformowanie mnie Get zadanie.

Po prostu KISS, a wszystko będzie dobrze!

Andrew Андрей Листочкин
źródło
2
A tak przy okazji, Google nie korzysta z GWT Gmail - oni wykorzystywać swoją bibliotekę zamknięcia.
Andrew Андрей Листочкин
1
Naprawdę doceniam tę analizę ryzyka na całym GWT i kompilacji z języków wyższego szczebla w ogóle.
Phil Cockfield,
2
Myślę, że zgadzam się z Andrew. Nie potrzebujesz wyższych poziomów ram jeśli rozumiesz JavaScript. ASP.NET WebForms na przykład ma taką strukturę, która używa niestandardowych znaczników XML i tworzenia rzeczy jak kreatorów i pop-upów bardziej prostego programowania paradygmat dla kogoś z niewielkim doświadczeniem z sieci, ale więcej doświadczenia z Windows Forms. Aby spróbować zachować paradygmat. Ale ASP.NET MVC jest coraz bardziej popularne, a średnia IMO, ponieważ jest bliżej do sieci - to paradygmat pasuje rzeczywistością.
jamiebarrow
3

Słyszałem, że te nazywane są „aplikacjami jednostronicowymi”.

To nowe środowisko, a zasady nie są jeszcze w pełni napisane. W ubiegłym roku (2010) pracowałem nad stosunkowo dużą jednostronicową aplikacją i to są narzędzia, których używaliśmy.

Zapleczem była Java, wykorzystująca serwlety do zapewnienia usługi JSON, której strona ostatecznie użyła do przesłania przygotowanego zamówienia. Z tej usługi wykorzystano również niektóre etapy weryfikacji i wyceny.

Kod front-end był JavaScript. Użyliśmy jQuery do manipulacji elementami strony, Pure do szablonowania, a RequireJs do rozbicia kodu na moduły. (Użyto narzędzia kompilacji RequireJs, aby zapewnić bardziej optymalne pobieranie).

Pisaliśmy nasze testy przy użyciu qUnit i miał test JUnit, który używany HtmlUnit uruchomić każdy test qUnit, następnie zeskrobać wyjście na wyniki, i przekazać lub nie opiera się na przejściu qUnit stan dobry / zły. Zostały one dodane do naszych testów jUnit dla zaplecza i wprowadzone do naszego ci, przy użyciu Hudson / Jenkins .

Sean McMillan
źródło
2

Pracuję nad taką aplikacją, zbudowaną na Ext JS. Aplikacja jest zorganizowane modułowo. Różne moduły są implementowane jako samodzielne komponenty, które usuwają się po sobie, gdy są usuwane z hierarchii komponentów Ext. Programy ładujące na żądanie ładują dodatkowe komponenty tuż przed ich użyciem (jeden plik js = jeden komponent).

Odkryłam, że podejście to nie jest trudne do skalowania. Jedyne rzeczywiste ograniczenia, na które natrafiłem, związane są z posiadaniem zbyt wielu elementów DOM w drzewie jednocześnie w IE. Rozwiązaniem jest strategiczne rozładowanie ukrytych części aplikacji. Ponieważ cała manipulacja DOM odbywa się za pośrednictwem hierarchii komponentów Ext, DOM jest prawie całkowicie oderwany, a programowanie jest proste.

Joeri Sebrechts
źródło
ExtJS jest naprawdę interesujący, aby zobaczyć (dzięki), ponieważ Sencha tworzy zarówno rodzime biblioteki JS, jak i GWT (ExtGWT). Wydaje się oni zabezpieczających zakłady.
Phil Cockfielda
0

Osobiście myślę, że ramy takie jak jQuery są niezbędne nie tylko do czynienia ze zmianami w różnych przeglądarkach, ale również do tuck te różnice z dala tak, że oni nie dodanie szumów do kodu. Narzędzia, takie jak GWT, Websharper i innymi wziąć to dalej i na pewno mają swoje miejsce, ale zastanawiam się, czy jest to tylko dodatkowa warstwa zadnie w większości przypadków.

Coś, że jestem zaskoczony, że nikt nie wspomniał jest testowanie jednostkowe. Obecnie powszechnie przyjmuje się, że złożone aplikacje po stronie serwera powinny mieć zautomatyzowane testy jednostkowe i myślę, że nadszedł już czas, w którym JS w aplikacjach RIA jest wystarczająco złożony, aby wymagać testów jednostkowych - wraz z architekturą / kodem, który to umożliwia.

Jednak w przeciwieństwie do złożonych aplikacji po stronie serwera, moje przeczucie oparte na tym, co widzę i słyszę, jest takie, że ogromna większość złożonych aplikacji po stronie klienta absolutnie nie ma testów jednostkowych (nie mówię tutaj o testach selenu, prawdziwych testach jednostkowych).

Myślę, że kolejnym pojawiającym się trendem będzie wprowadzenie testów jednostkowych (i kodu, który można testować jednostkowo). Właśnie ukończyłem projekt z umiarkowaną ilością nieskonfigurowanych skryptów JavaScript, mam nadzieję, że będzie to ostatni.

FinnNk
źródło
Oto ładny post o TDD z JavaScript, które mogą być przedmiotem zainteresowania [ msdn.microsoft.com/en-us/scriptjunkie/ff452703 ]
jamiebarrow