Фреймворки 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.

Основные функции, которые вам понравятся:

  1. образованное сообщество и команда, которая придумала идеальный шаблон дизайна. отличные соглашения и модульная / объектно-ориентированная архитектура. с отношением программирования CrossBrowser:)
  2. MV * структура. создавать виджеты пользовательского интерфейса с внешними.htm-шаблонами, а для производства - создавать все ваши javascript и шаблоны в единый, уменьшенный и маленький.js
  3. строить классы с наследованием. установщики свойств, множество функциональных инструментов.
  4. механизм pub / sub (именованные темы в dojo)
  5. множество элементов управления пользовательского интерфейса, от контроля формы проверки, диалоговых окон / всплывающих подсказок до мощного, настраиваемого (но легковесного) решения для работы с диаграммами и сеткой данных.
  6. хорошая система модульного тестирования под названием DOH. у этого также есть робот, чтобы воспроизвести действия мыши / клавиатуры.
  7. инструмент запросов (например, JQuery) с именем NodeList со всеми функциями jquery и даже множеством его плагинов.
  8. и хорошая, но не очень полная часть. у него есть модуль JsonRest для использования с вашими сервисами REST. это удобный инструмент, но ему не хватает многих функций.

Чтобы преодолеть эти проблемы, мы разработали AJAX-решение для обработки ошибок и универсальное решение для загрузки и уведомлений. мы сделали это очень легко, используя рамочные соглашения и структуры dojo. если вы не хотите этого делать, возможно, вам придется использовать другую платформу для этой части.

Посмотрев на отличные SPA в Интернете, вы обнаружите, что все они настроены и используют несколько фреймворков. но наш опыт с одним додзё был фантастическим. и поэтому я предлагаю вам не думать о каких-либо других рамках, так как все они являются неполными для SPA. но в конечном итоге у вас есть еще один вариант (который я не рекомендую и у меня нет подробной информации). использовать JAVA-инфраструктуру, способную создавать SPA, автоматически генерируя пользовательский интерфейс и javascript.

Другие вопросы по тегам