Опасность использования ExtJS в большом проекте с RoR? - PullRequest
22 голосов
/ 08 октября 2008

Мы разрабатываем довольно большое приложение с использованием инфраструктуры Ruby on Rails (система CRM) и планируем переписать его, чтобы использовать ExtJS, чтобы Rails просто выполнял обработку данных, тогда как ExtJS выполнял бы всю тяжелую работу браузера в настольных системах как

Кто-нибудь имеет некоторый опыт и намеки на то, что будет лучшим подходом? Достаточно ли подходит ExtJS для использования в относительно больших (и сложных) приложениях? А как насчет части Rails - что будет лучшим подходом здесь?

EDIT:

Просто чтобы прояснить. Я бы предпочел сделать это таким образом, чтобы весь код приложения на стороне клиента javascript загружался сразу (при запуске приложения, оптимально как один сжатый js-файл), а затем просто использовать ajax для отправки данных в Rails и из него. приложение. Также было бы неплохо иметь ERB для динамической генерации элементов абликации Ext.

Ответы [ 10 ]

29 голосов
/ 08 ноября 2008

В настоящее время у меня очень большое приложение в стиле рабочего стола, написанное на ExtJS. Раньше он работал поверх Perl Catalyst MVC Framework, но как только весь слой View был преобразован в настольный компьютер на основе ExtJS, я начал переходить на модели и контроллеры Ruby on Rails. Он одинаково быстр, если не быстрее, проще в обслуживании и имеет гораздо меньшую базу кода.

  • Убедитесь, что в настройке активной записи не указано корневое имя модели в json, чтобы в JsonStore от Ext не возникало проблем с чтением записей. На ActiveRecord BASE есть опция с именем include_root_in_json, которую необходимо установить на false.

  • Убедитесь, что вы правильно определили свои классы Application в Ext и максимизировали повторное использование кода, и вам понадобится какой-то метод очистки неиспользуемых узлов в DOM. Производительность Javascript может быть очень сложной, если вы не используете последние версии Safari или Firefox 3.1.

  • Возможно, вы захотите, чтобы какой-либо метод кэширования данных на сервере передавался вашему приложению в формате JSON во время загрузки страницы. Это сократит количество поездок в оба конца через Ajax.

  • Определенно используйте объекты ExtM WindowManager и StoreManager или сверните свои собственные из Ext.util.MixedCollection

  • Создайте свой код в отдельных управляемых файлах, затем создайте процесс, который объединит их в один файл, а затем запустите на нем компрессор YUI или Dean Edwards Packer, чтобы сжать / скрыть файл. Служите всем JS и CSS в их отдельных файлах, включая поставляемые Ext.

14 голосов
/ 09 октября 2008

[обновление 2012 года] ExtJS был приобретен Sencha, который предлагает лицензию GPLv3 и две коммерческие лицензии.

[комментарий за октябрь 2008 г.] ExtJS великолепен в технических достоинствах, но фиаско с лицензированием несколько месяцев назад заставило меня взглянуть на другие фреймворки - я вообще сейчас не доверяю создателям ExtJS. Мне не нравится, как они формулировали свою лицензию, и как они притворялись сторонниками открытого кода, явно пытаясь получить несправедливую прибыль от тех, кто им верил.

Я против использования ExtJS только по моральным соображениям.

5 голосов
/ 18 октября 2008

Это относится к ответу Милана на мой предыдущий ответ, но, как новичок здесь, у меня недостаточно очков репутации, чтобы ответить там:

Возникла проблема с "sp is undefined", которая была результатом кэширования Rails файлов JavaScript в один большой файл (в противном случае было бы несколько сотен файлов). Кеширование внесло несколько странных ошибок с символами новой строки, которые отбросили все это. Это заставило меня немного выдернуть волосы, но решением было обновить Ruby с 1.8.6 (уровень патча 72) до последней версии 1.8.7. Это решило проблему, поэтому, пожалуйста, проверьте его еще раз, если вы хотите посмотреть (вам нужно будет сделать полное обновление, чтобы преодолеть кеширование ресурсов).

Я рад, что вы уже сталкивались с Ext MVC. В настоящее время я могу полностью полагать, что это должно быть довольно трудно понять, в основном из-за отсутствия примеров, учебных пособий и демонстраций. Однако сам код достаточно хорошо документирован (по крайней мере, более новый код в любом случае, есть много чего нужно очистить).

В настоящее время я занимаюсь рефакторингом нескольких ключевых классов, прежде чем он будет готов к надлежащему «выпуску». Когда все будет готово (я думаю, пару недель), я сгенерирую документацию и настрою быстрый сайт с некоторыми демонстрациями и примерами кода. Когда я это сделаю, я выложу сообщение в своем блоге (http://edspencer.net).

Моя цель в этом состоит в том, чтобы попытаться предоставить структуру, которая значительно упростит написание приложений такого типа, и установить некоторые соглашения. В настоящее время не существует консенсуса или способа по умолчанию для структурирования приложений ExtJS, поэтому все, что мы можем сделать для его продвижения, будет шагом в правильном направлении! Комментарии и материалы приветствуются.

4 голосов
/ 08 мая 2009

Возможно, вы захотите взглянуть на среду Netzke, которая, как считается, делает именно это: облегчает создание сложного одностраничного веб-приложения с упором на модульный подход.

Преимущества Netzke:

  • Возможность повторного использования и расширяемости кода. После того, как вы сделали свой компонент (как клиентский, так и серверный), вы можете использовать его в любом месте, объединить с другими компонентами или расширить его с помощью наследования.

  • Эффективность. Класс для каждого компонента загружается с сервера (и оценивается) только один раз, что экономит много времени при обмене данными между сервером и клиентом.

  • Это открытый исходный код, и он находится в активной разработке. Он имеет живые демо и пример кода.

  • Он имеет встроенные компоненты, которые можно использовать сразу, даже не касаясь Ext JS (просто настройте их в Rails)

  • Он был использован (его автором) для реальной разработки сложного логистического приложения.

Недостатками Netzke являются:

  • Код еще молодой, а сообщество маленькое.

Если вам интересно, посмотрите описание и детали дизайна здесь: https://github.com/nomadcoder/netzke-core

Живая демоверсия / учебные пособия можно найти здесь: http://netzke -demo.herokuapp.com и здесь: http://yanit.heroku.com

4 голосов
/ 12 октября 2008

Я успешно развернул большое приложение RoR / ExtJS, которое вы описываете («одностраничный» AJAX на стороне клиента). Ext_scaffold в значительной степени красная сельдь.

Нет ничего сложного в том, чтобы слаженно работать RoR и ExtJS. Фундаментальный выбор заключается в том, следует ли расширять ExtJS для «говорить на Rails», исправлять RoR для «говорить на ExtJS» или встречаться посередине. Это будет зависеть от навыков вашей команды.

Я принял стратегию встречи посередине, которая включает в себя:

  • Расширьте Ext.data.Store и Ext.data.Record, чтобы знать о правилах маршрутизации Rails
  • Хак Ext.grid.EditorPanel и Ext.form.BasicForm, чтобы хорошо играть с ассоциациями ActiveRecord
  • Напишите некоторые модули для расширения ActiveRecord::Base и ApplicationController, чтобы просто фиксировать от Ext.grid.EditorPanel и Ext.form.BasicForm

Вот и все.

Сказав это, у ExtJS есть недостатки.

  • Тебе придется испачкать руки во внутренних органах. Не попадайтесь на демоверсии.
  • Документация сообщества плохая и ориентирована на PHP.
  • Исходя из мира RoR, ориентированного на Github / Lighthouse, использование VBulletin похоже на пробуждение в 1998 году. Я имею в виду, что нет общедоступного средства отслеживания ошибок, только обновленное сообщение форума (WTF?).
  • Код немного перегружен.
  • Команда потеряла авторитет Open Source, поэтому они потеряли кислород Open Source.
  • Команда, кажется, сосредоточена на интеграции с GWT (кто-нибудь может сказать "enterpri $ ey"?).
1 голос
/ 17 октября 2008

Я развернул ExtJS и Rails для ряда приложений, и их, безусловно, можно заставить общаться друг с другом. Мы собрали небольшую демонстрацию приложения, которое мы сейчас разрабатываем, в Rails + Ext на http://demo.domine.co.uk/admin. Пока игнорируйте интерфейс, так как он еще не завершен - раздел администратора практически завершен, и вы можете войти это с:

имя пользователя: Эдвард пароль: rarrar

Поскольку демоверсия еще не полностью закончена, я не буду гарантировать, что на данном этапе она работает правильно во всем, кроме Firefox. Нет причин не работать в других браузерах, я просто еще не потратил время на их тестирование. Дело в большей степени об интеграции с рельсами.

Каждое приложение в меню «Пуск» взаимодействует с бэкэндом Rails через JSON. Я написал основной плагин Rails, чтобы сделать большую часть работы за нас там. В скором времени я опубликую код, но надеюсь, это покажет, насколько хорошо эти две технологии могут работать вместе ...

1 голос
/ 09 октября 2008

У меня тоже есть опыт использования ExtJS с Rails. Использование фреймворка - отличный способ получить красивые виджеты бесплатно. Соглашение REST должно хорошо сочетаться с фреймворком, если вы используете его для разработки одностраничных приложений. Хорошо работает и с RJS.

Вот мои проблемы с использованием фреймворка

  1. Вы не можете использовать flash [: note], поскольку перезагрузка одностраничного приложения глупа. Это делает прохождение проверочных уведомлений и сообщений делом рутинным, поскольку для их отображения необходимо использовать методы RJS / javascript.

  2. Вы не можете много использовать erb, поэтому вам нужно заключить много логики в обратные вызовы json.

1 голос
/ 08 октября 2008

Ext определенно достаточно зрел, чтобы справиться с этой ситуацией. В настоящее время я работаю над проектом Rails с большим количеством Ext, и самая сложная часть определенно работала с Rails to_json для рендеринга JSON, который Ext может читать (для массивов, хэшей, моделей, которые не прошли проверку и т. Д.)

Проверьте плагин ext_ scaffold для Rails. Я начал с этого и взломал его ActiveRecord / ActionView расширения, пока он не сделал то, что мне было нужно.

0 голосов
/ 08 февраля 2009

Хорошо. Я использую extjs gxt gwt на многих проектах, и это очень легко разрабатывать. Но я хочу сказать вам, что я создал свой проект с помощью extjs + gwt (gxt), я не уверен насчет Ruby. текст ссылки

0 голосов
/ 14 октября 2008

Хотя у меня нет опыта работы с ExtJS (кроме чтения в книге " Практические Rails "), я использовал jQuery Flexigrid с jrails больше ощущения от рабочего стола.

Это сработало довольно хорошо.

...