Вопреки распространенному мнению, Ember.js - это не «более тяжелый подход» к Backbone.js. Это разные инструменты, предназначенные для совершенно разных конечных продуктов. Сладкое место Ember - это приложения, в которых пользователь будет держать приложение открытым в течение длительного периода времени, возможно, весь день, а взаимодействие с представлениями приложения или базовыми данными вызывает глубокие изменения в иерархии представлений. Ember больше Backbone, но благодаря Expires
, Cache-Control
это имеет значение только на первой загрузки. После двух дней ежедневного использования эти лишние 30 КБ будут затенены передачей данных, и раньше, если ваш контент будет включать изображения.
Backbone идеально подходит для приложений с небольшим количеством состояний, где иерархия представлений остается относительно плоской и где пользователь имеет тенденцию обращаться к приложению нечасто или на более короткие периоды времени. Код Backbone должен оставаться коротким и понятным, потому что он предполагает, что данные, поддерживающие DOM, будут выброшены, а оба элемента будут собраны в памяти: https://github.com/documentcloud/backbone/issues/231#issuecomment-4452400 Меньший размер Backbone также делает его более подходящим для кратких взаимодействий.
Приложения, которые люди пишут в обоих фреймворках, отражают эти варианты использования: приложения Ember.js включают веб-панель управления Square , Zendesk (по крайней мере, интерфейс агента / продажи билетов) и планировщик Groupon : все приложения, с которыми пользователь может работать весь день.
Базовые приложения больше ориентированы на краткие или случайные взаимодействия, которые часто представляют собой просто небольшие разделы более крупной статической страницы: airbnb , Khan Academy , карта и списки Foursquare .
Вы можете использовать Backbone для создания приложений, на которые нацелен Ember (например, Rdio ), путем а) увеличения объема кода приложения, за который вы несете ответственность, чтобы избежать таких проблем, как утечки памяти или зомби-события (я лично не рекомендую этот подход) или б) путем добавления сторонних библиотек, таких как backbone.marionette или Coccyx - многие из этих библиотек пытаются предоставить аналогичные перекрывающиеся функции, и вы, вероятно, в конечном итоге соберете свой собственный каркас, который больше и требует большего количества связующего кода, чем если бы вы просто использовали Ember.
В конечном итоге на вопрос, «что использовать», есть два ответа.
Во-первых, «Что я должен использовать, как правило, в своей карьере»: и то, и другое, точно так же, как вы в конечном итоге изучите любые инструменты, специфичные для работы, которую вы захотите использовать в будущем. Вы бы никогда не спросили: «Магистраль или D3?»; «Backbone or Ember» - столь же глупый вопрос.
Во-вторых, «Что конкретно мне следует использовать в моем следующем проекте»: зависит от проекта. Оба будут одинаково легко взаимодействовать с сервером Rails. Если ваш следующий проект включает сочетание страниц, генерируемых сервером, с так называемыми «островками богатства», предоставляемыми JavaScript, используйте Backbone. Если в вашем следующем проекте все взаимодействие переносится в среду браузера, используйте Ember.