Опасности использования ExtJS в большом проекте с RoR?

#ruby-on-rails #ruby #extjs #ria #rich-internet-application

Вопрос:

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

У кого-нибудь есть некоторый опыт и подсказки о том, какой подход был бы лучшим? Является ли EXTJ достаточно зрелым для использования в относительно больших (и сложных) приложениях? А как насчет части Рельсов — какой здесь будет лучший подход?

Редактировать:

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

Ответ №1:

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

  • Убедитесь, что вы настроили конфигурацию активной записи так, чтобы она не включала корневое имя модели в json, чтобы в JSON-магазине Ext не возникало проблем с чтением записей. В БАЗЕ ActiveRecord есть опция include_root_in_json , которую вы должны установить в значение false.
  • Убедитесь, что вы правильно определили классы приложений в Ext и максимально увеличили повторное использование кода, и вам понадобится какой-то метод для очистки неиспользуемых узлов в DOM. Производительность Javascript может быть настоящей проблемой, если вы не используете последние версии Safari или Firefox 3.1.
  • Вероятно, вам понадобится какой-то метод кэширования данных на сервере, которые будут передаваться вашему приложению в формате JSON во время загрузки страницы. Это сократит количество поездок туда и обратно через Ajax.
  • Определенно используйте объекты WindowManager и StoreManager Ext или создайте свой собственный из коллекции Ext.util.MixedCollection
  • Разработайте свой код в отдельных управляемых файлах, затем выполните процесс сборки, который объединит их в один файл, а затем запустите на нем компрессор YUI или упаковщик Дина Эдвардса, чтобы сжать / запутать файл. Обслуживайте все JS и CSS в их собственных отдельных файлах, включая предоставленные Ext.

Комментарии:

1. 1 для процесса сборки «отделить и объединить позже». Это НЕОБХОДИМО для всех тяжелых приложений JS.

Ответ №2:

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

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

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

Комментарии:

1. Это как раз и моя забота. Помимо проектов с открытым исходным кодом, даже коммерческая лицензия просто сумасшедшая. Взгляните на мой разговор с Тедом Дрисколлом (вице-президентом по продажам в Senecha), и вы поймете, о чем я говорю. padcom13.blogspot.com/2011/03/…

2. То же самое касалось и здесь в то время, но теперь Sencha предлагает лицензию GPLv3 и для ExtJS. — sencha.com/products/extjs/license

Ответ №3:

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

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

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

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

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

Комментарии:

1. Эд, не могли бы вы быть так любезны и предоставить нам некоторый базовый обзор проделанной вами работы (как части работают вместе, какой-то базовый рабочий процесс, которому следует следовать при его использовании и т.д.). Я некоторое время возился с ним, но объем кода, который он содержит, все еще немного ошеломляет меня. Спасибо.

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

Ответ №4:

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

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

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

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

В этом-то все и дело.

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

  • Тебе придется испачкать руки во внутренних органах. Не обманывайтесь демонстрациями.
  • Документация сообщества плохая и ориентирована на PHP.
  • Выходя из мира RoR, ориентированного на Github/маяк, использование vBulletin похоже на пробуждение в 1998 году. Я имею в виду, что публичного багтрекера нет, просто обновленное сообщение на форуме (WTF?).
  • Код немного переработан.
  • Команда потеряла доверие к открытому исходному коду, поэтому они потеряли кислород с открытым исходным кодом.
  • Команда, похоже, сосредоточена на интеграции с GWT (может ли кто-нибудь сказать «enterpri$ey»?).

Комментарии:

1. Да, кодовая база Ext огромна, и мы ожидаем некоторой грязной работы с этой стороны (хотя наши навыки js немного отстают от наших навыков на стороне сервера), а также некоторой сантехники в части RoR/AR. Есть ли шанс, что вы поделитесь более подробной информацией об изменениях, которые вы внесли с обеих сторон? В любом случае, спасибо!

Ответ №5:

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

Преимущества Netzke заключаются в следующем:

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

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

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

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

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

Комментарии:

1. Демонстрационная версия выглядит круто и очень подходит для CRM или системы управления проектами (большинство из которых используют устаревший дизайн, ориентированный на страницы)- superuser.com/questions/380146/…

Ответ №6:

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

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

Ответ №7:

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

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

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

Комментарии:

1. Я решил проблему ERB, создав файлы js через Rails. Только что создал контроллер с действием, на который я направляю все запросы для файлов js моего приложения. Затем эти файлы создаются так же, как и обычные представления. Еще одним преимуществом является то, что мои файлы js недоступны для общественности.

Ответ №8:

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

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

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

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

Комментарии:

1. Привет, Эд, спасибо, что ответил. Я видел некоторые ваши усилия на Github, но, честно говоря,мне пока не удалось разобраться в этом. Демонстрационное приложение сейчас не работает («sp не определен», — говорит Fbug). Есть ли у вас какое-либо приблизительное представление о дате выпуска вашего кода? Еще раз спасибо вам.

Ответ №9:

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

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

Ответ №10:

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