Ember.js або Backbone.js для спокійного бекенда [закрито]


98

Я вже знаю, що ember.js є більш важким ваговим підходом на відміну від backbone.js. Я прочитав багато статей про обидва.

Я запитую себе, який фреймворк працює легше, як передній план для решти відпочинку рейки. Для backbone.js я бачив різні підходи до виклику бекенду відпочинку. Для ембер здається, що мені потрібно включити ще кілька бібліотек, таких як "дані" або "ресурси". Чому для цього існують дві бібліотеки?

Так що кращий вибір? Немає численних прикладів, щоб з'єднати інтерфейс із заднім числом. Що є хорошим робочим прикладом для зворотного дзвінка до цього:

URI: ../restapi/topics Отримати авторизаційні дані: формат адміністратора / секрету: json


3
Треба любити питання, яке "не конструктивне", але корисна, продумана відповідь все ж отримала 240+ відгуків.
Андрій

Відповіді:


257

Всупереч поширеній думці, Ember.js не є «більш важким підходом до ваги» для Backbone.js. Це різні види інструментів, націлені на абсолютно різні кінцеві продукти. Солодка пляма Ембер - це програми, де користувач триматиме час відкритий додаток, можливо, цілий день, а взаємодія з поглядами програми чи базовими даними викликає глибокі зміни в ієрархії перегляду. Ember більше Backbone, але завдяки Expires, Cache-Controlце має значення тільки на першого завантаження. Після двох днів щоденного користування додаткові 30 кб будуть затьмарені передачею даних раніше, якщо ваш вміст передбачає зображення.

Магістральна система ідеально підходить для додатків з невеликою кількістю станів, коли ієрархія перегляду залишається відносно рівною і де користувач прагне отримати доступ до програми нечасто або на коротший проміжок часу. Код хребта залишається коротким і солодким, оскільки він передбачає, що дані, що підтримують DOM, будуть викинуті, і обидва елементи будуть зібрані в пам'яті: https://github.com/documentcloud/backbone/isissue/231#issuecomment-4452400 Менший розмір хребта також робить його більш придатним для коротких взаємодій.

Програми, які люди пишуть в обох рамках, відображають ці можливості використання: програми Ember.js включають веб-панель Square , Zendesk (принаймні інтерфейс агента / квитків) та планувальник Groupon : усі програми, над якими користувач може провести цілий день, працюючи.

Аплікаційні програми зосереджуються більше на коротких або випадкових взаємодіях, які часто є лише невеликими розділами більшої статичної сторінки: airbnb , Khan Academy , карта та списки Foursquare .

Ви можете використовувати Backbone для створення тих програм, на які орієнтується Ембер (наприклад, Rdio ), а) збільшуючи кількість коду програми, за який ви несете відповідальність, щоб уникнути проблем, таких як витоки пам'яті або події зомбі (я особисто не рекомендую такий підхід) або b) додавши бібліотеки сторонніх організацій, як backbone.marionette або Coccyx - є багато таких бібліотек, які намагаються забезпечити подібний функціонал, що перекривається, і, ймовірно, ви складете власну власну рамку, яка більша і вимагає більше клейового коду, ніж якби ти щойно використовував Ембер.

Зрештою, на питання "що використовувати" є два відповіді.

По-перше, "Що я повинен використовувати взагалі у своїй кар'єрі": І те, і інше, як ви в кінцевому підсумку вивчите будь-які інструменти, характерні для роботи, яку ви хочете робити в майбутньому. Ви ніколи не запитаєте "Магістраль або D3?"; "Хребет або Ембер" - це не менш дурне питання.

По-друге, "Що я повинен використовувати конкретно для свого наступного проекту": Залежить від проекту. Обидва спілкуватимуться з сервером Rails з однаковою легкістю. Якщо ваш наступний проект передбачає поєднання сторінок, створених сервером, з так званими "островами багатства", що надаються JavaScript, використовуйте Backbone. Якщо ваш наступний проект підштовхує всю взаємодію до середовища браузера, використовуйте Ember.


4
Чудова відповідь, Трек. Просто хотілося тут прокоментувати це Expiresта Cache-Controlдопомогти набагато менше, ніж думають люди - особливо щодо мобільних пристроїв, які часто їх ігнорують. Я пам’ятаю, версія IOS повністю їх ігнорувала (але все ще слухаю маніфест кешу HTML5). Крім того, ці значення заголовка не допоможуть під час першого відвідування користувача, що, як правило, є найважливішим у вирішенні питання про те, чи залишиться користувач та використовуватиме ваш додаток. Якщо сказати, що різниця у файлі на 30 Кбіт не здається мені такою великою справою. Це сира чи мінімізована та gzipped різниця на 30 кб?
Мавіс Ледфорд

11
Якщо ви подивитесь на фактичні додатки, які стиль Ember призначений допомогти у створенні, ви виявите, що ці нудні кілограми не залишаються. Або вони надходять від Ember, і ваш код програми менший, або вони надходять з опорних плагінів, або вони надходять з коду, який ви самі пишете. Wunderlist , який, на вашу думку, може бути "простим" годинником, який становить приблизно 300 кбіт передачі. Я б міг уявити, що він буде подібного розміру з Ембер, можливо, меншим - ніколи не написав точної копії Wunderlist, якого я не можу сказати зі 100% впевненістю.
Trek Glowacki

1
Я погоджуюсь, мої найпопулярніші магістральні додатки працюють на 178 кбіт + шаблони стиснуті та мінімізовані. Просто вказавши, як ми не повинні покладатися на кешування браузера.
Мавіс Ледфорд

2
Трек, ви помітили свій аналіз використання Backbone в додатках із розширеними моделями використання та складним управлінням державою. Я пережив досвід перетворення застарілого додатка на Backbone і повинен був робити саме те, що ви перерахували. Нам потрібно було інтегрувати Маріонетку, а також написати багато клейового коду для таких речей, як фільтрація маршруту до / після відправлення, пом'якшення витоку пам'яті та краще управління подіями.
Майк Клаймер

9
"Ви ніколи не запитаєте Backbone або D3", - звичайно, але я можу легко уявити собі проект, де я використовував би D3 спільно з Backbone. Напевно, набагато складніше уявити проект, коли Backbone та Ember використовуються разом на одній сторінці. Отже, я вважаю питання "хребет або Ембер" досить справедливим. Ось ще одна публікація, яку я знайшов досить інформативною, оскільки глибше порівнює дві рамки: net.tutsplus.com/tutorials/javascript-ajax/…
Shiprack

26

Щоб дати коротку, спрощену відповідь: для RESTful бекенду на даний момент ви повинні використовувати Backbone.

Щоб дати більш складну відповідь: Це дійсно залежить від того, що ви робите. Як говорили інші, Ембер розрахована на різні речі і сподобається різному набору людей. Моя коротка відповідь ґрунтується на вашому включенні вимоги RESTful.

На даний момент Ember-Data (який, здається, є механізмом збереження за замовчуванням у Ember), далеко не готовий до виробництва. Це означає, що він має досить багато помилок і, що головне, не підтримує вкладені URI (наприклад, / posts / 2 / comments / 4556). Якщо REST - це ваша вимога, вам доведеться поки що обійти це питання, якщо ви виберете Ember (тобто вам доведеться або зламати його, чекати, реалізовувати щось на зразок Ember-Data з нуля, або використовувати не -все-RESTful URI). Ember-Data не є строго частиною Ember, тому це цілком можливо.

Основні відмінності між цими двома, крім розміру, в основному:

Ембер намагається зробити якнайбільше для вас, так що вам не доведеться писати стільки коду. Це дуже ієрархічно, і якщо ваш додаток також дуже ієрархічний, швидше за все, це буде добре. Оскільки це робить для вас стільки, вам може бути важко зрозуміти, звідки беруться помилки, і пояснити, чому відбувається несподівана поведінка ("магії" багато). Якщо у вас є додаток, який природно вписується в тип додатка, який Ембер очікує, що ви будуєте, це, швидше за все, не буде проблемою.

Магістраль намагається зробити якнайменше для вас, щоб ви могли міркувати про те, що відбувається, і створити архітектуру, яка відповідає вашому додатку (а не створювати додаток, який відповідає архітектурі рамки, яку ви використовуєте). Починати з цього набагато простіше, але, якщо ви не будете обережні, ви можете швидко закінчитися безладом. Він не робить такі речі, як обчислювані властивості, автоматичні розв'язування подій тощо, і залишає їх вам, тому вам потрібно буде багато реалізувати багато матеріалів (або принаймні вибирати бібліотеки, які це роблять для вас), хоча це скоріше вся суть.

Оновлення : Схоже, нещодавно Ember тепер підтримує вкладені URI, тому, гадаю, питання зводиться до того, яка магія вам подобається та чи підходить Ember архітектурно для вашого додатка.


5
«Найголовніше, не підтримує вкладені ідентифікатори URI (/ повідомлення / 2 / коментарі / 4556, наприклад)» Ось відповідні вчинити від пари тижнів назад: github.com/emberjs/data/commit / ... . Це знає, що може бути важко йти в ногу з швидко розвивається рамкою перед випуском, але ми завжди повинні прагнути до точності, розмовляючи з авторитетом і пропонуючи поради!
Trek Glowacki

Класно, дякую. Оновлено мою відповідь. Я припускаю, що це було внесено у злиття великих відносин минулого тижня або близько того. Я переглянув і прочитав перераховані зміни, але не міг знайти згадок про URL-адреси, і проблеми, які я відстежував, були все ще відкритими, коли я перевіряв їх. Дякуємо за те, що вказали на зобов’язання - його важко знайти, не знаючи про його існування.
bengillies

Це справді з недавнього злиття галузі взаємовідносин та покращення відносин. Ми повільно стежимо за старими проблемами і закриваємо їх на цьому тижні.
Trek Glowacki

3

Я думаю, що ваше питання незабаром буде заблоковано :) Між двома рамками є кілька суперечок.

По суті, Backbone не робить багато речей, і тому я люблю це: вам доведеться багато кодувати, але ви будете кодувати в потрібному місці. Ембер робить багато речей, тож краще дивіться, що вона робить.

Обговорення на сервері - одна з небагатьох речей, які робить Backbone, і вона робить велику роботу з цим. Тож я б почав із «Хребта», а потім спробував би Ембер, якщо ви не задоволені цілком.

Ви також можете прослухати цей подкаст, де Джеремі Ашкенас, творець "Хребта", та Єгуда Кац, член "Ембер", провели хорошу дискусію


2
Дякую. Що ви можете сказати про рештки розширень вугілля. Краще використовувати дані чи ресурс? Чи можете ви навести простий приклад виклику api для відпочинку?
Робін Вірух

1
Коротка відповідь полягає в тому, що бібліотеки постійно змінюються, і я не можу дати вам відповідь, грунтуючись на моєму попередньому досвіді (я це робив на собі для оцінки). Я думаю , що цей пост буде сказати вам більше , ніж я можу: stackoverflow.com/questions/8623091/ember-js-rest-api
Ніколя Zozol

1
Я вже бачив цю посаду. Ось чому я запитав :)
Робін Вірух

2
@NicolasZozol який подкаст? посилання?
деепак

3
javascriptjabber.com/004-jsj-backbone-js-with-jeremy-ashkenas з лютого. Це ще до того, як стане зрозуміліше, що ці рамки насправді не існували на аренах, що перекриваються. Ви можете почути, як Єгуда і Джеремі просто розмовляють один з одним, насправді не роблячи порівнянь.
Trek Glowacki
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.