Restful 백엔드 용 Ember.js 또는 Backbone.js [닫힘]


98

ember.js가 backbone.js와 달리 더 무거운 접근 방식이라는 것을 이미 알고 있습니다. 나는 둘 다에 대한 많은 기사를 읽었습니다.

레일스 레스트 백엔드의 프런트 엔드로 어떤 프레임 워크가 더 쉽게 작동하는지 스스로에게 묻고 있습니다. backbone.js의 경우 나머지 백엔드를 호출하는 다른 접근 방식을 보았습니다. 엠버의 경우 '데이터'또는 '리소스'와 같은 라이브러리를 더 포함해야하는 것 같습니다. 이를 위해 두 개의 라이브러리가있는 이유는 무엇입니까?

그래서 더 나은 선택은 무엇입니까? 프론트 엔드와 백엔드를 연결하는 예는 많지 않습니다. 이것에 대한 백엔드 나머지 호출에 대한 좋은 작동 예는 무엇입니까?

URI : ../restapi/topics GET 인증 자격 증명 : admin / secrect 형식 : json


3
"건설적이지 않은"질문을 좋아해야하지만 도움이되고 잘 짜여진 답변은 여전히 ​​240 개 이상의 찬성표를 얻었습니다.
Andrew

답변:


257

대중적인 의견과는 달리 Ember.js는 Backbone.js에 대한 '더 무거운 접근 방식'이 아닙니다. 완전히 다른 최종 제품을 대상으로하는 다양한 종류의 도구입니다. Ember의 스윗 스팟은 사용자가 아마도 하루 종일 오랜 시간 동안 애플리케이션을 열어두고 애플리케이션의 뷰 또는 기본 데이터와의 상호 작용이 뷰 계층 구조의 깊은 변경을 트리거하는 애플리케이션입니다. 엠버는 백본보다 큰,하지만 덕분에 Expires, Cache-Control이것은 단지 첫 번째로드에 중요. 매일 사용하는 이틀이 지나면 콘텐츠에 이미지가 포함 된 경우 더 빨리 데이터 전송으로 인해 추가로 30k가 가려집니다.

백본은보기 계층 구조가 비교적 평평하게 유지되고 사용자가 앱에 드물게 또는 짧은 시간 동안 액세스하는 경향이있는 상태가 적은 애플리케이션에 이상적입니다. Backbone의 코드는 DOM을 지원하는 데이터가 버려지고 두 항목 모두 메모리가 수집 될 것이라는 가정을하기 때문에 짧고 멋지게 유지됩니다 : https://github.com/documentcloud/backbone/issues/231#issuecomment-4452400 Backbone의 더 작은 크기는 또한 짧은 상호 작용에 더 적합합니다.

사람들이 두 프레임 워크에서 작성하는 앱은 다음 용도를 반영합니다. Ember.js 앱에는 Square의 웹 대시 보드 , Zendesk (적어도 에이전트 / 티켓팅 인터페이스), Groupon의 스케줄러 가 포함됩니다.

백본 앱은 에어 비앤비 , 칸 아카데미 , Foursquare의지도 및 목록과 같은 더 큰 정적 페이지의 작은 섹션 인 짧거나 캐주얼 한 상호 작용에 더 중점을 둡니다 .

Backbone을 사용하여 Ember가 대상으로하는 응용 프로그램의 종류 (예 : Rdio ) 를 만들 수 있습니다. a) 메모리 누수 또는 좀비 이벤트와 같은 문제를 방지하기 위해 담당하는 응용 프로그램 코드의 양을 늘 립니다 (개인적으로이 접근 방식을 권장하지 않습니다) 또는 b) backbone.marionette 또는 Coccyx 와 같은 타사 라이브러리를 추가하여 – 유사한 중복 기능을 모두 제공하려는 이러한 라이브러리가 많이 있으며 아마도 사용자 정의 프레임 워크가 더 크고 더 많은 글루 코드를 필요로 할 것입니다. 방금 Ember를 사용했다면.

궁극적으로 "어떤 것을 사용할 것인가"라는 질문에는 두 가지 답이 있습니다.

첫째, "내 경력에서 일반적으로 어떤 것을 사용해야합니까?": 둘 다, 마치 미래에하고 싶은 작업에 특정한 도구를 배우는 것과 같습니다. "Backbone 또는 D3?"라고 묻지 않을 것입니다. "백본 또는 엠버"는 똑같이 어리석은 질문입니다.

둘째, "다음 프로젝트에서 특히 어떤 것을 사용해야합니까?": 프로젝트에 따라 다릅니다. 둘 다 Rails 서버와 쉽게 통신 할 수 있습니다. 다음 프로젝트가 서버에서 생성 된 페이지와 JavaScript가 제공하는 소위 "풍부한 섬"의 혼합을 포함하는 경우 Backbone을 사용하십시오. 다음 프로젝트에서 모든 상호 작용을 브라우저 환경으로 푸시하면 Ember를 사용하십시오.


4
훌륭한 반응, 트렉. 여기에 댓글을 달고 사람들이 생각하는 것보다 훨씬 덜 도움 이 Expires되고 싶었습니다. Cache-Control특히 자주 무시하는 모바일 장치의 측면 에서 말입니다 . iOS 버전이 완전히 무시한 것을 기억합니다 (하지만 여전히 HTML5 캐시 매니페스트를 들었습니다). 또한 이러한 헤더 값은 사용자가 처음 방문하는 동안에는 도움이되지 않습니다. 일반적으로 사용자가 앱을 계속 사용할지 여부를 결정하는 데 가장 중요합니다. 30kb 파일 차이를 모두 말하는 것은 나에게 그렇게 큰 문제가 아닌 것 같습니다. 그것은 원시 또는 축소되고 gzip으로 압축 된 30k 차이입니까?
Mauvis Ledford 2012

11
Ember가 만드는 데 도움이되는 스타일 인 실제 응용 프로그램을 살펴보면 성가신 KB를 피할 수 없다는 것을 알 수 있습니다. Ember에서 왔고 애플리케이션 코드가 더 작거나 백본 플러그인에서 나오거나 직접 작성한 코드에서 나옵니다. Wunderlist 는 약 300kb의 전송에서 "간단한"클럭이라고 생각합니다. 나는 그것이 Ember와 비슷한 크기 일 것이라고 생각합니다. 아마도 더 작을 것입니다 – Wunderlist를 정확히 작성하지 않았기 때문에 100 % 확실하게 말할 수 없습니다.
Trek Glowacki

1
저의 가장 인기있는 백본 앱은 178kb + 템플릿으로 압축되고 축소됩니다. 브라우저 캐싱에 의존해서는 안되는 방법을 지적합니다.
Mauvis Ledford

2
Trek, 확장 된 사용 패턴과 복잡한 상태 관리를 통해 앱에서 Backbone을 사용하는 것에 대한 분석을 확인했습니다. 레거시 앱을 Backbone으로 변환 한 경험을 통해 목록에있는대로 정확히 수행해야했습니다. 우리는 Marionette를 통합하고 사전 / 사후 경로 필터링, 메모리 누수 완화 및 더 나은 이벤트 관리와 같은 작업을위한 많은 글루 코드를 작성해야했습니다.
Mike Clymer 2013

9
"당신은 Backbone이나 D3를 결코 묻지 않을 것입니다."-물론입니다.하지만 저는 Backbone과 함께 D3를 사용하는 프로젝트를 쉽게 상상할 수 있습니다. Backbone과 Ember가 한 페이지에서 함께 사용되는 프로젝트를 상상하기가 훨씬 더 어려울 것입니다. 그래서 저는 "Backbone or Ember"라는 질문이 상당히 공평하다고 생각합니다. 다음은 두 프레임 워크를 더 깊이 비교하기 때문에 매우 유익한 또 다른 게시물입니다. net.tutsplus.com/tutorials/javascript-ajax/…
Shiprack

26

간단하고 간단한 답변을 제공하려면 RESTful 백엔드의 경우 현재 Backbone을 사용해야합니다.

좀 더 복잡한 대답을하기 위해 : 그것은 당신이하는 일에 달려 있습니다. 다른 사람들이 말했듯이 Ember는 다양한 용도로 설계되었으며 다양한 사람들에게 어필 할 것입니다. 내 짧은 대답은 RESTful 요구 사항 포함을 기반으로합니다.

현재 Ember-Data (Ember 내의 기본 지속성 메커니즘 인 것처럼 보임)는 생산 준비가되어 있지 않습니다. 이것이 의미하는 바는 꽤 많은 버그가 있고, 결정적으로 중첩 된 URI (예 : / posts / 2 / comments / 4556)를 지원하지 않는다는 것입니다. REST가 요구 사항 인 경우 Ember를 선택하면 당분간이 문제를 해결해야합니다 (즉, 해킹하고 기다린 다음 Ember-Data와 같은 것을 처음부터 직접 구현하거나 사용하지 않아야합니다. -매우 RESTful URI). Ember-Data는 엄격히 Ember의 일부가 아니므로 전적으로 가능합니다.

크기를 제외하고 둘 사이의 주요 차이점은 기본적으로 다음과 같습니다.

Ember는 최대한 많은 코드를 작성할 필요가 없도록 최대한 많은 작업을 수행하려고합니다. 매우 계층 적이며 앱이 매우 계층 적이라면 잘 맞을 것입니다. 그것은 당신을 위해 너무 많은 일을하기 때문에 버그가 어디에서 오는지 파악하고 예상치 못한 동작이 발생하는 이유를 추론하는 것이 어려울 수 있습니다 (많은 "마법"이 있습니다). Ember가 빌드 할 것으로 예상하는 앱 유형에 자연스럽게 맞는 앱이 있다면 문제가되지 않을 것입니다.

Backbone은 (사용중인 프레임 워크의 아키텍처에 맞는 앱을 빌드하는 대신) 진행 상황을 추론하고 앱에 맞는 아키텍처를 빌드 할 수 있도록 가능한 한 적은 작업을 수행합니다. 시작하기가 훨씬 쉽지만 조심하지 않으면 매우 빨리 엉망이 될 수 있습니다. 계산 된 속성, 자동 바인딩 해제 이벤트 등과 같은 작업을 수행하지 않고 사용자에게 맡기므로 많은 항목을 직접 구현해야합니다 (또는 적어도이를 수행하는 라이브러리를 선택해야합니다). 오히려 전체 요점.

업데이트 : 최근 Ember는 이제 중첩 된 URI를 지원하는 것으로 보입니다. 그래서 질문은 당신이 얼마나 마법을 좋아하는지, 그리고 Ember가 당신의 앱에 구조적으로 잘 맞는지에 달려 있다고 생각합니다.


5
"중요하게, 중첩 된 URI를 지원하지 않습니다 (예 : / posts / 2 / comments / 4556)"다음은 몇 주 전의 관련 커밋입니다. github.com/emberjs/data/commit/… . 빠르게 움직이는 프리 릴리즈 프레임 워크를 따라 잡는 것이 어려울 수 있다는 것을 알고 있지만, 우리는 권위있게 말하고 조언을 제공 할 때 항상 정확성을 목표로해야합니다!
Trek Glowacki

고마워요. 내 대답을 업데이트했습니다. 나는 그것이 지난주 정도의 큰 관계 병합에서 소개되었다고 생각합니다. 나열된 변경 사항을 살펴보고 읽었지만 URL에 대한 언급을 찾을 수 없었고 추적하던 문제는 확인했을 때 여전히 열려있었습니다. 커밋을 지적 해 주셔서 감사합니다. 이미 존재하는지 모르면 찾기 어려울 수 있습니다.
bengillies

그것은 실제로 최근의 관계 개선 지점의 병합에서 나온 것입니다. 이번 주에는 오래된 문제를 천천히 추적하고 종료했습니다.
Trek Glowacki

3

귀하의 질문이 곧 차단 될 것이라고 생각합니다. :) 두 프레임 워크간에 몇 가지 경합이 있습니다.

기본적으로 Backbone은 많은 일을하지 않습니다. 그것이 제가 좋아하는 이유입니다. 많은 코딩을해야하지만 올바른 위치에서 코딩 할 것입니다. Ember는 많은 일을하므로 그것이 무엇을하는지 지켜 보는 것이 좋습니다.

서버 토론은 Backbone이하는 몇 안되는 일 중 하나이며, 그와 함께 훌륭한 일을합니다. 그래서 저는 Backbone으로 시작한 다음 완전히 만족스럽지 않으면 Ember를 시도해 보겠습니다.

Backbone의 제작자 인 Jeremy Ashkenas와 Ember의 회원 인 Yehuda Katz가 좋은 토론 을하는 이 팟 캐스트를 들을 수도 있습니다.


2
감사합니다. 엠버의 Rets 확장에 대해 무엇을 말할 수 있습니까? 데이터 나 리소스를 더 잘 사용 하시겠습니까? 나머지 API 호출의 간단한 예를 들어 줄 수 있습니까?
Robin Wieruch 2012 년

1
짧은 대답은 도서관이 항상 다양하고 이전 경험을 바탕으로 답변을 드릴 수 없다는 것입니다 (저는 평가를 위해 스스로했습니다). 이 게시물이 내가 할 수있는 것보다 더 많은 것을 알려줄 것이라고 생각합니다. stackoverflow.com/questions/8623091/ember-js-rest-api
니콜라스 Zozol

1
나는 이미이 포스트를 보았다. 그게 내가 물은 이유 :)
Robin Wieruch

2
@NicolasZozol 어떤 팟 캐스트? 링크?
deepak

3
2 월에 javascriptjabber.com/004-jsj-backbone-js-with-jeremy-ashkenas . 이것은 이러한 프레임 워크가 실제로 겹치는 영역에 존재하지 않는다는 것이 분명해지기 전입니다. Yehuda와 Jeremy가 실제로 비교하지 않고 서로 과거의 이야기를들을 수 있습니다.
Trek Glowacki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.