Niebezpieczeństwa korzystania z ExtJS na dużym projekcie z RoR?

Rozwijamy znacznie dużą aplikację wykorzystującą Ruby on Rails framework (system CRM) i rozważamy przepisanie jej na ExtJS tak, aby Rails po prostu zajmował się obsługą danych, podczas gdy ExtJS zrobiłby wszystkie podnoszenie ciężaru przeglądarki w sposób podobny do pulpitu.

Ktoś ma jakieś doświadczenie i podpowiedzi jakie byłoby najlepsze podejście? Czy ExtJS jest wystarczająco dojrzały, aby być używany w stosunkowo dużych (i złożonych) aplikacjach? A co z częścią Rails - jaka byłaby najlepsza tutaj?

EDIT:

Żeby było jasne. Wolałbym to zrobić w taki sposób, aby cały kod aplikacji po stronie klienta javascript był ładowany od razu (przy uruchomieniu aplikacji, optymalnie jako jeden skompresowany plik js), a następnie po prostu użyć ajax do wysyłania danych do i z aplikacji Rails. Dobrze byłoby też mieć dostępny ERB do dynamicznego generowania elementów aplikacji Ext.

Author: Milan Novota, 2008-10-08

10 answers

Obecnie mam bardzo dużą aplikację w stylu desktopowym napisaną w ExtJS. Kiedyś działał na bazie frameworka Catalyst MVC Perla, ale gdy cała warstwa widoku została przekonwertowana na pulpit oparty na ExtJS, zacząłem migrować do Modeli i kontrolerów Ruby on Rails. Jest równie szybki, jeśli nie szybszy i łatwiejszy w utrzymaniu oraz ma znacznie mniejszą bazę kodu.

  • Upewnij się, że konfiguracja active record nie zawiera głównej nazwy modelu w json, aby Jsonstore Ext nie ma problemu z odczytaniem zapisów. W bazie ActiveRecord istnieje opcja include_root_in_json, którą musisz ustawić na false.

  • Upewnij się, że poprawnie zdefiniowałeś swoje klasy aplikacji w Ext i zmaksymalizowałeś ponowne użycie kodu, a będziesz potrzebował jakiejś metody do czyszczenia nieużywanych węzłów w DOM. Wydajność Javascript może być prawdziwym bólem, chyba że używasz najnowszych wersji Safari lub Firefox 3.1.

  • Prawdopodobnie będziesz chciał jakiegoś metoda buforowania danych na serwerze, które mają być serwowane do aplikacji w formacie JSON w momencie ładowania strony. Zmniejszy to liczbę przejazdów w obie strony przez Ajax.

  • Zdecydowanie korzystaj z obiektów WindowManager i StoreManager w Ext lub zwiń własne z Ext.util.MixedCollection

  • Rozwijaj swój kod w oddzielnych, zarządzalnych plikach, a następnie wykonuj proces kompilacji, który łączy je w jeden plik, a następnie uruchom kompresor Yui lub Dean Edwards Packer na nim, aby skompresować / zaciemnić plik. Obsługuj wszystkie JS i CSS we własnych pojedynczych plikach, w tym dostarczanych przez Ext.

 29
Author: Jonathan Soeder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-02 21:28:20

[2012 update] ExtJS został przejęty przez Sencha, który oferuje licencję GPLv3 i dwie licencje komercyjne.

[2008-Październik komentarz] ExtJS jest świetny pod względem technicznym, ale fiasko z licencją kilka miesięcy temu skłoniło mnie do spojrzenia na inne frameworki - nie ufam już twórcom ExtJS w ogóle. Nie podoba mi się to, jak sformułowali swoją licencję i jak udawali, że są zwolennikami open source, oczywiście próbując niesprawiedliwie czerpać zyski z tych, którzy uwierzyłem im.

Jestem przeciwko używaniu ExtJS tylko ze względów moralnych.

 14
Author: Chii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-25 03:43:00

To należy do odpowiedzi na komentarz Milana do mojej poprzedniej odpowiedzi, ale jako nowicjusz tutaj nie mam wystarczającej ilości punktów reputacji, aby odpowiedzieć tam:

Wystąpił problem z "SP is undefined", który był wynikiem buforowania plików JavaScript przez Rails do jednego dużego pliku (w przeciwnym razie byłoby ich kilkaset). Buforowanie wprowadziło kilka dziwnych błędów z nowymi liniami, które wyrzuciły całość. Przez jakiś czas wyrywałem włosy, ale rozwiązaniem było zaktualizuj Ruby z wersji 1.8.6 (patch level 72) do najnowszej wersji 1.8.7. Naprawiło to problem, więc sprawdź go ponownie, jeśli chcesz spojrzeć (musisz wykonać pełne odświeżenie, aby pokonać buforowanie zasobów).

Cieszę się, że natknąłeś się już na rzeczy z EXT MVC. Obecnie mogę w pełni uwierzyć, że musi to być dość trudne do zrozumienia, głównie ze względu na brak przykładów,samouczków i dem. Sam kod jest jednak dość dobrze udokumentowany (przynajmniej nowszy kod w każdym razie jest dużo który wymaga oczyszczenia).

Jestem obecnie w trakcie refaktoryzacji kilku kluczowych klas, zanim będzie ona gotowa do odpowiedniego 'wydania'. Kiedy to będzie gotowe (myślę o kilku tygodniach), wygeneruję dokumentację i skonfiguruję szybką stronę z kilkoma demami i przykładowym kodem. Kiedy to zrobię, wstawię post na moim blogu ( http://edspencer.net).

Moim celem jest próba stworzenia frameworka, który znacznie ułatwi pisanie tego typu aplikacji, i ustanowić pewne konwencje. Obecnie nie ma konsensusu ani domyślnego sposobu strukturyzowania aplikacji ExtJS, więc wszystko, co możemy zrobić, aby to zrobić, będzie krokiem we właściwym kierunku! Komentarze i komentarze są mile widziane.

 5
Author: Ed Spencer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-18 12:57:56

Udało mi się wdrożyć dużą aplikację RoR / ExtJS w rodzaju opisanego ("jednostronicowa" aplikacja AJAX po stronie klienta). Ext_scaffold jest w zasadzie red-herring.

Nie jest zbyt podatkowy, aby ROR i ExtJS działały płynnie razem. Podstawowym wyborem jest to, czy rozszerzyć ExtJS na "speak Rails", łatać RoR na "speak ExtJS", czy spotkać się w środku. To będzie zależeć od umiejętności Twojego zespołu.

Przyjęłam strategię meet-in-the-middle, która zawiera:

  • Rozszerz Ext.data.Store i Ext.data.Record, aby być świadomym konwencji trasowania szyn
  • Hack Ext.grid.EditorPanel i Ext.form.BasicForm aby dobrze grać ze skojarzeniami ActiveRecord
  • zapis niektórych modułów, aby rozszerzyć ActiveRecord::Base i ApplicationController, aby po prostu zatwierdzić z Ext.grid.EditorPanel i Ext.form.BasicForm
To tyle.

Powiedziawszy to, istnieją wady ExtJS.

    Będziesz musiał ubrudzić sobie ręce w środku. Nie daj się zwieść demom.
  • The dokumentacja Społeczności jest słaba i skoncentrowana na PHP.
  • pochodzący ze świata Ror z Github/Lighthouse, używanie VBulletin jest jak przebudzenie się w 1998 roku. Chodzi mi o to, że nie ma publicznego bugtrackera tylko post na forum, który jest aktualizowany (WTF?).
  • kod jest trochę przerobiony.
  • zespół stracił wiarygodność Open Source, więc stracił tlen Open Source.
  • zespół wydaje się być skoncentrowany na integracji z GWT (czy ktoś może powiedzieć "enterpri$ey"?).
 4
Author: Dave Nolan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-12 13:26:07

Możesz rzucić okiem na Framework Netzke, który jest uważany za taki: ułatwia tworzenie złożonych jednostronicowych aplikacji internetowych z naciskiem na podejście modułowe.

Zalety Netzke to:

  • Wielokrotnego użytku i rozszerzalności kodu. Po utworzeniu komponentu (zarówno po stronie klienta, jak i serwera) możesz go ponownie użyć w dowolnym miejscu, połączyć z innymi komponentami lub rozszerzyć go o dziedziczenie.

  • Wydajność. Klasa dla każdy komponent jest ładowany z serwera (i oceniany) tylko raz, co oszczędza dużo czasu na komunikacji serwer-klient.

  • Jest open source i jest aktywnie rozwijany. Posiada live dema i przykładowy kod.

  • Posiada wbudowane komponenty, których możesz używać od razu, nawet bez dotykania Ext JS (wystarczy skonfigurować je w Rails)

  • Został wykorzystany (przez jego autora) do realnego rozwoju złożonej logistyki podanie.

Wady Netzke to:

    Kod jest wciąż młody, a społeczność mała.

Jeśli jesteś zainteresowany, spójrz na opis i szczegóły projektu tutaj: https://github.com/nomadcoder/netzke-core

Live demo / tutoriale można znaleźć tutaj: http://netzke-demo.herokuapp.com i tutaj: http://yanit.heroku.com

 4
Author: mxgrn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-02 08:31:22

Ext jest zdecydowanie wystarczająco dojrzały, aby poradzić sobie z tą sytuacją. Obecnie pracuję nad projektem Rails z dużą ilością Ext, a najtrudniejszą częścią jest zdecydowanie praca z to_json Rails, aby renderować JSON, który może odczytać Ext (dla tablic, hashów, modeli, które nie powiodły się walidacji, itp.)

Sprawdź wtyczkę ext_ scaffold dla Rails. Zacząłem od tego i zhakowałem jego ActiveRecord/ActionView rozszerzeń, dopóki nie zrobił tego, czego potrzebowałem.

 1
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 12:58:35

Ja też mam pewne doświadczenie w używaniu ExtJS z Railami. Korzystanie z frameworku to świetny sposób, aby uzyskać ładne widżety za darmo. Konwencja REST powinna również pasować do frameworka, jeśli używasz go do tworzenia aplikacji jednostronicowych. Działa również dobrze z RJS.

Oto moje problemy z używaniem frameworka

  1. Nie możesz użyć Flasha [: notice], ponieważ przeładowanie pojedynczej aplikacji jest głupie. To sprawia, że przekazywanie powiadomień o walidacji i wiadomości jest obowiązkiem ponieważ musisz użyć metod RJS / javascript, aby je pokazać.

  2. Nie można używać erb dużo więc trzeba enkapsulate dużo logiki w JSON wywołań zwrotnych.

 1
Author: JasonOng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 08:21:30

Wdrożyłem ExtJS i Rails dla wielu aplikacji i na pewno można je ze sobą rozmawiać. Przygotowaliśmy szybkie demo aplikacji, którą obecnie rozwijamy w Rails + Ext pod adresem http://demo.domine.co.uk/admin. Zignoruj na razie front end, ponieważ nie jest kompletny - sekcja admin jest zasadniczo skończona i możesz się do niej zalogować:

Nazwa użytkownika: edward hasło: rarrar

Ponieważ demo nie jest jeszcze do końca ukończone nie gwarantuję, że na tym etapie działa poprawnie we wszystkim innym niż Firefox. Nie ma powodu, aby nie działało w innych przeglądarkach, po prostu nie spędziłem jeszcze czasu na ich testowaniu. Chodzi jednak bardziej o integrację z rails.

Każda aplikacja w menu start wchodzi w interakcję z backendem Rails poprzez JSON. Napisałem podstawową wtyczkę Rails, aby wykonać większość pracy za nas. Niedługo wypuszczę kod za tym, ale na razie mam nadzieję, że to da jakiś pomysł, jak dobrze te dwie technologie mogą ze sobą współpracować...

 1
Author: Ed Spencer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-17 13:52:39

Chociaż nie mam doświadczenia z ExtJS (poza czytaniem o "Practical Rails Projects"), użyłem jQuery Flexigrid z jrails, aby uzyskać bardziej pulpit.

To działało całkiem nieźle.

 0
Author: Andy Jeffries,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-14 08:55:23

Ok. Używam extjs gxt gwt na wielu projektach i jest bardzo łatwy do opracowania. Ale chcę ci powiedzieć, że zbudowałem swój projekt z extjs + gwt( gxt), nie jestem pewien co do Rubiego. link text

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-08 05:40:43