Фреймворки JavaScript для создания одностраничных приложений
Моя цель - перенести существующее веб-приложение в одностраничное приложение RESTful (SPA). В настоящее время я оцениваю несколько фреймворков веб-приложений Javascript.
Мои требования заключаются в следующем:
- Уровень данных RESTful (например, ember-data)
- MV * -структуре
- Динамические маршруты
- Тестирование-поддержка
- Кодирование по соглашению
- SEO-поддержка
- Браузер-История-поддержка
- Хорошая (API-) документация
- Производство готовых
- Живое сообщество
позвоночник
Текущее приложение использует backbone.js
, В общем и целом, backbone.js
Это хороший проект, но мне не хватает четко определенных структур, которые определяют, где что должно произойти и как все должно быть реализовано. Работа в большой команде с меняющимися разработчиками приводит к некоторому неструктурированному коду, который сложно поддерживать и который трудно понять. Вот почему я сейчас ищу каркас, который уже определяет все эти вещи.
тлеющие угли
Я смотрел в ember.js
последние дни. Подход кажется мне очень перспективным. Но, к сожалению, код меняется практически ежедневно. Так что я не буду называть это готовым к производству. И, к сожалению, мы не можем дождаться выхода версии 1.0. Но мне действительно нравится идея, лежащая в основе.
угловатый
Angular.js
это также широко распространенный фреймворк, поддерживаемый Google. Но я не мог познакомиться с угловым. Для меня структура кажется неясной, отсутствуют объяснения общих обязанностей каждой части структуры, а реализации кажутся замысловатыми. Просто, чтобы понять это: это только мое личное впечатление и может быть основано на недостающих знаниях.
Бэтмен и Метеор
Как я понял, обеим фреймворкам нужна и серверная часть. И поскольку мы просто хотим получить бэкэнд RESTful - независимо от того, какой язык, техника или программное обеспечение, это не то, что нам нужно. Кроме того, бэкэнд API уже существует (RoR).
Нокаут, CanJS и позвоночник
Я не углубился в эти три кандидата. Может быть, это будет моим следующим шагом.
Итак, мои вопросы сейчас:
- Я скучаю по хорошим SPA-фреймворкам?
- Какие рамки вы бы предложили / порекомендовали?
- Вы бы избежали какой-либо из упомянутых рамок?
- Каков ваш опыт работы с большими SP-приложениями?
PS: Я бы хотел порекомендовать отличный пост от Стивена Андерсона (основного разработчика из Knockout.js) о конференции "Трон JS" (с 2012 года) и фреймворках javascript в целом.
PS: Да, я знаю, что на SO уже есть вопрос. Но поскольку разработка СПА так быстро и быстро развивается, большинство из них уже устарели.
2 ответа
Недавно мне тоже пришлось определиться со структурой JavaScript SPA для проекта.
Раньше я смотрел на Ember, и у меня были такие же мысли, как и у вас, - мне очень понравилось, но мне казалось, что еще слишком рано использовать... около половины прочитанных мною учебников не работали с текущей версией, потому что что-то недавно было изменилось, как работает шаблонизатор.
Магистраль была первой платформой, на которую мы серьезно посмотрели. Я не уверен, что понимаю, почему вы думаете, что у него нет "четко определенных структур"? Backbone довольно ясно понимает, как разделить код Model и View. Может быть, вы имеете в виду, что нет какого-то шаблона приложения? В любом случае, Backbone, кажется, действительно сфокусирован на части привязки модели /REST, но на самом деле ничего не предписывает привязку вида. Если привязка модели важна для вас и вы используете Rails, сделать это будет очень просто. К сожалению, веб-сервисы для моего приложения на самом деле не совпадали, и мне пришлось написать свой собственный
.sync
а также.parse
методы для всего. Разделение кода Model и View было хорошим, но поскольку нам пришлось писать все наши привязки с нуля, это того не стоило.Нокаут - это как Инь для Яна Основы. Если Backbone ориентирован на модель, Knockout - это инфраструктура MVVM, ориентированная на представление. Она имеет
observable
оболочки для свойств объекта JavaScript и используетdata-bind
атрибут для привязки свойств к вашему HTML. В конце концов, мы выбрали Knockout, поскольку привязка к представлению была в основном тем, что нам было нужно для нашего приложения. (... плюс другие, как будет обсуждаться позже...) Если вам нравятся привязки вида Knockout и привязки модели Backbone, есть также KnockBack, который объединяет обе платформы.Посмотрел на это после Knockout - к сожалению, мы все, казалось, были очень довольны тем, как Knockout просматривал привязку. Это казалось намного сложнее и сложнее, чем нокаут. И он использует кучу пользовательских атрибутов HTML для выполнения привязок, что я не уверен, что мне нравится... Я могу еще раз взглянуть на Angular, потому что, поскольку я столкнулся с множеством людей, которым действительно нравится среда - возможно, мы просто посмотрел на это слишком поздно для этого проекта.
Бэтмен, Метеор, CanJS, Позвоночник
На самом деле не слишком внимательно посмотреть ни на что из этого. Хотя я знаю, что Spine похожа на Backbone с явными объектами Controller и написана на CoffeeScript.
Послесловие
Как я уже упоминал, мы в конечном итоге использовали Knockout, потому что для нашего проекта более важным было сосредоточиться на привязке представлений. Мы также использовали RequireJS для модульности, перекрестки и Hasher для маршрутизации и истории, Jasmine для тестирования, а также JQuery, Twitter Bootstrap и http://underscorejs.org/ (и, вероятно, больше библиотек, которые я сейчас забываю).
Разработка приложений Javascript больше похожа на экосистему Java, чем на экосистему Rails. Rails предоставляет прочное ядро, которое вы собираетесь использовать для каждого приложения (инфраструктура Rails), и сообщество предоставляет множество настроек (гемов). Ява предоставляет... язык. И тогда вы можете выбрать Java EE или Spring или Play или Struts или Tapestry. И выберите JDBC или Hibernate или TopLink или Ibatis, чтобы общаться с базой данных. И тогда вы можете использовать Ant, Maven или Gradle, чтобы построить его. И выберите Tomcat, Jetty, JBoss или WebLogin, чтобы запустить его. Поэтому больше внимания уделяется выбору того, что вам нужно и что работает вместе, чем выбору платформы для использования.
Прошел год с тех пор, как мы начали разработку нашего проекта облачных сервисов с многочисленными SPA, поэтому было принято важное решение - какую инфраструктуру javascript использовать для нашего пользовательского интерфейса для удовлетворения потребностей нашей архитектуры RESTful. и после многих исследований мы в конечном итоге использовали Dojo Framework.
Основные функции, которые вам понравятся:
- образованное сообщество и команда, которая придумала идеальный шаблон дизайна. отличные соглашения и модульная / объектно-ориентированная архитектура. с отношением программирования CrossBrowser:)
- MV * структура. создавать виджеты пользовательского интерфейса с внешними.htm-шаблонами, а для производства - создавать все ваши javascript и шаблоны в единый, уменьшенный и маленький.js
- строить классы с наследованием. установщики свойств, множество функциональных инструментов.
- механизм pub / sub (именованные темы в dojo)
- множество элементов управления пользовательского интерфейса, от контроля формы проверки, диалоговых окон / всплывающих подсказок до мощного, настраиваемого (но легковесного) решения для работы с диаграммами и сеткой данных.
- хорошая система модульного тестирования под названием DOH. у этого также есть робот, чтобы воспроизвести действия мыши / клавиатуры.
- инструмент запросов (например, JQuery) с именем NodeList со всеми функциями jquery и даже множеством его плагинов.
- и хорошая, но не очень полная часть. у него есть модуль JsonRest для использования с вашими сервисами REST. это удобный инструмент, но ему не хватает многих функций.
Чтобы преодолеть эти проблемы, мы разработали AJAX-решение для обработки ошибок и универсальное решение для загрузки и уведомлений. мы сделали это очень легко, используя рамочные соглашения и структуры dojo. если вы не хотите этого делать, возможно, вам придется использовать другую платформу для этой части.
Посмотрев на отличные SPA в Интернете, вы обнаружите, что все они настроены и используют несколько фреймворков. но наш опыт с одним додзё был фантастическим. и поэтому я предлагаю вам не думать о каких-либо других рамках, так как все они являются неполными для SPA. но в конечном итоге у вас есть еще один вариант (который я не рекомендую и у меня нет подробной информации). использовать JAVA-инфраструктуру, способную создавать SPA, автоматически генерируя пользовательский интерфейс и javascript.