Restfulバックエンド用のEmber.jsまたはBackbone.js [終了]


98

ember.jsは、backbone.jsとは対照的に、より重いアプローチであることはすでに知っています。私は両方について多くの記事を読みました。

Rails Restバックエンドのフロントエンドとして、どのフレームワークがより簡単に機能するかを自問しています。backbone.jsについては、レストバックエンドを呼び出すためのさまざまなアプローチを見ました。残りは、「データ」や「リソース」のようないくつかのライブラリを含める必要があるようです。これにはなぜ2つのライブラリがあるのですか?

それで、より良い選択は何ですか?フロントエンドとバックエンドを接続する多くの例もありません。これに対するバックエンドレストコールの良い動作例は次のとおりです。

URI:../restapi/topics GET auth認証情報:admin / secrect形式:json


3
お奨めは「建設的ではない」質問を気に入っていますが、役立つ、よく考え抜かれた回答には、まだ240以上の賛成票があります。
Andrew

回答:


257

一般的な意見に反して、Ember.jsはBackbone.jsに対する「より重いアプローチ」ではありません。これらは、まったく異なる最終製品を対象とするさまざまな種類のツールです。Emberのスイートスポットは、ユーザーがアプリケーションを長期間(おそらく1日中)開いたままにし、アプリケーションのビューまたは基になるデータとの対話がビュー階層の深い変化を引き起こすアプリケーションです。エンバーはバックボーンよりも大きいですが、のおかげでExpiresCache-Controlこれは最初のロードでのみ問題になります。毎日2日間使用した後、コンテンツに画像が含まれる場合は、追加の30kがデータ転送によって覆い隠されます。

バックボーンは、ビュー階層が比較的フラットなままで、ユーザーがアプリに頻繁にアクセスしたり、アクセスしたりすることが少ない、状態の数が少ないアプリケーションに最適です。バックボーンのコードは、DOMのバッキングデータが破棄され、両方のアイテムがメモリ収集されると想定されているため、短くて甘いままです。https//github.com/documentcloud/backbone/issues/231#issuecomment-4452400バックボーンのサイズが小さいため、短い相互作用にも適しています。

Ember.jsアプリには、SquareのWebダッシュボードZendesk(少なくともエージェント/チケット作成インターフェース)、Grouponのスケジューラーが含まれます。ユーザーが1日中作業する可能性のあるすべてのアプリケーションです。

バックボーンアプリは、短いまたはカジュアルなインタラクションに重点を置いています。これは、多くの場合、大きな静的ページの小さなセクションです:airbnbKhan AcademyFoursquareのマップとリスト

あなたはできるエンバーターゲット(例えばというアプリケーションの種類を作るためにバックボーンを使用しRDIOメモリリークやゾンビのイベントのような回避問題へのためにあなたがしている責任をアプリケーションコードの量を増やす)ことで)(私は個人的にこの方法をお勧めしません)またはb)backbone.marionetteCoccyxなどのサードパーティライブラリを追加する–これらのライブラリの多くは、同様の重複する機能を提供しようとするものであり、おそらく、より大きく、より多くの接着剤コードを必要とする独自のカスタムフレームワークをアセンブルすることになります。 Emberを使用しただけの場合。

最終的に、「どちらを使用するか」という質問には2つの答えがあります。

まず、「一般的に、私のキャリアでどちらを使用すればよいか」:どちらも、あなたが将来、やりたい仕事に特化したツールを習得するのと同じように。「バックボーンまたはD3?」と尋ねることは決してないでしょう。「バックボーンまたはエンバー」も同様にばかげた質問です。

第二に、「どちらを使用するべきか、具体的には次のプロジェクトで」:プロジェクトによって異なります。どちらも同じくらい簡単にRailsサーバーと通信します。次のプロジェクトに、サーバーによって生成されたページと、JavaScriptによって提供されるいわゆる「豊かな島」が混在する場合は、Backboneを使用します。次のプロジェクトがすべての対話をブラウザー環境にプッシュする場合は、Emberを使用します。


4
素晴らしい反応、トレック。それだけ、ここでコメントしたいExpiresCache-Controlヘルプははるかに少ない人よりも考えて、特に、多くの場合、それらを無視し、モバイル機器の面で。iOSのバージョンがそれらを完全に無視したことを覚えています(ただし、HTML5キャッシュマニフェストのリストエンドです)。さらに、これらのヘッダー値は、ユーザーが初めてアクセスするときには役に立ちません。これは通常、ユーザーが滞在してアプリを使用するかどうかを決定する上で最も重要です。30kbのファイルの違いをすべて言っても、私にとってそれほど大きな問題ではないようです。それは生か、縮小されてgzip圧縮された30kの違いですか?
Mauvis Ledford、2012

11
Emberが作成を支援することを意図したスタイルである実際のアプリケーションを見てみると、これらの厄介なkbをエスケープすることはありません。Emberからのものであり、アプリケーションコードが小さいか、バックボーンプラグインからのものか、または自分で作成したコードからのものです。 Wunderlistは、約300 kbの転送で「単純な」時計になると思います。私はそれがEmberと同様のサイズであると想像します、おそらくもっと小さいです– 100%の確実性で私が言うことができない正確なコピーWunderlistを書いたことがなかった。
Trek Glowacki

1
同意します。私の最も人気のあるバックボーンアプリは、178 kb以上のテンプレートで圧縮および縮小されています。ブラウザのキャッシュに依存してはならない方法を指摘するだけです。
Mauvis Ledford、2012

2
トレック、拡張された使用パターンと複雑な状態管理を備えたアプリでのバックボーンの使用の分析にスポットを当てています。私はレガシーアプリをバックボーンに変換する経験を積み、あなたがリストしたものを正確に実行する必要がありました。Marionetteを統合するだけでなく、ルートの前後のフィルタリング、メモリリークの軽減、イベント管理の向上などのために、大量のグルーコードを記述する必要がありました。
マイククライマー2013

9
「BackboneやD3を要求することは決してない」-確かに、私はD3をBackboneと組み合わせて使用​​するプロジェクトを簡単に想像できます。1ページでBackboneとEmberが一緒に使用されるプロジェクトを想像するのはおそらくはるかに困難です。したがって、「バックボーンまたはエンバー」という質問はかなり公平だと思います。2つのフレームワークをより深く比較しているため、これは私が非常に有益であると思った別の投稿です。net.tutsplus.com
tutorials

26

簡潔で簡単な答えを与えるために:RESTfulバックエンドの場合、現時点では、バックボーンを使用する必要があります。

より複雑な答えを与えるために:それは本当にあなたが何をしているかに依存します。他の人が言ったように、エンバーはさまざまなもののために設計されており、さまざまな人々にアピールします。私の短い答えは、RESTful要件の包含に基づいています。

現時点では、Ember-Data(Ember内のデフォルトの永続化メカニズムであると思われる)は、本番稼働にはほど遠いものです。これは、かなりの数のバグがあり、入れ子になったURI(たとえば、/ posts / 2 / comments / 4556)をサポートしていないことを意味します。RESTが要件である場合、Emberを選択する場合は当面これに対処する必要があります(つまり、ハックするか、待機するか、Ember-Dataのようなものを最初から実装するか、使用しないかのいずれかになります。 -very-RESTful URI)。Ember-Dataは厳密にはEmberの一部ではないため、これは完全に可能です。

サイズを除いて、2つの主な違いは基本的に次のとおりです。

Emberはできるだけ多くのことを実行しようとするため、多くのコードを記述する必要はありません。これは非常に階層的であり、アプリも非常に階層的である場合、おそらく適切です。それはあなたのためにたくさんのことをするので、バグがどこから来ているのかを理解し、予期しない振る舞いが起こっている理由を推論することは難しいかもしれません(たくさんの「魔法」があります)。Emberが作成することを期待しているタイプのアプリに自然に適合するアプリがある場合、これはおそらく問題にはなりません。

バックボーンは、ユーザーが実行しているフレームワークのアーキテクチャに適合するアプリを構築するのではなく、何が起こっているのかを推論し、アプリに適合するアーキテクチャを構築できるように、できる限り少ないことを行います。始めるのははるかに簡単ですが、注意しない限り、混乱が非常に早くなる可能性があります。それは計算されたプロパティ、自動バインド解除イベントなどのようなことは行わず、それらをあなたに任せるので、多くのことを自分で実装する必要があります(または少なくともあなたのためにそれを行うライブラリを選択する)むしろ全体のポイント。

更新:最近、EmberはネストされたURIをサポートするようになったようです。問題は、どれだけの魔法が好きか、そしてEmberがアーキテクチャ上、アプリに適しているかどうかにあると思います。


5
「具体的には、入れ子になったURIをサポートしていません(/ posts / 2 / comments / 4556など)」数週間前の関連するコミットを次に示します:github.com/emberjs/data/commit/…。急速に変化するリリース前のフレームワークに追いつくのは難しいことは承知していますが、権威と話したりアドバイスを提供したりするときは常に正確さを目指す必要があります。
Trek Glowacki

よろしくお願いします。私の答えを更新しました。先週くらいの大きな関係合併で紹介されたと思います。リストされた変更を確認して読みましたが、URLについての言及は見つかりませんでした。追跡していた問題を確認したところ、まだ開いていました。コミットを指摘していただきありがとうございます。その存在を知らないと、見つけるのが難しい場合があります。
ベンギリーズ

それは確かに、関係改善ブランチの最近のマージからのものです。今週は、古い問題をゆっくりとフォローしてクローズしてきました。
Trek Glowacki

3

あなたの質問はすぐにブロックされると思います:) 2つのフレームワークの間にはいくつかの競合があります。

基本的にバックボーンは多くのことをしません、そしてそれが私がそれを愛する理由です:あなたはたくさんコーディングしなければならないでしょう、しかしあなたは正しい場所でコーディングするでしょう。Emberは多くのことを行うので、Emberが何をしているのかをよく見る必要があります。

サーバーのディスカッションは、Backboneが行う数少ないことの1つであり、それを使用して素晴らしい仕事をします。だから私はバックボーンから始めて、あなたが完全に満足していないなら、エンバーを試してみるでしょう。

また、このポッドキャストを聞いて、バックボーンの作成者であるジェレミーアシュケナスとエンバーのメンバーであるイェフダカッツが素晴らしいディスカッションをすることもできます。


2
ありがとうございました。エンバーのretsエクステンションについて何と言えますか?データまたはリソースをよりよく使用しますか?REST API呼び出しの簡単な例を挙げられますか?
Robin Wieruch、2012年

1
簡単に言えば、ライブラリは常に変化するため、以前の経験に基づいて応答することはできません(評価のために自分で行いました)。私は私ができるよりも、この記事はより多くのことを教えてくれます思う:stackoverflow.com/questions/8623091/ember-js-rest-api
ニコラZozol

1
私はすでにこの記事を見ました。それが私が尋ねた理由です:)
Robin Wieruch

2
@NicolasZozolどのポッドキャスト?リンク?
ディーパック

3
2月に戻ったjavascriptjabber.com/004-jsj-backbone-js-with-jeremy-ashkenas。これは、これらのフレームワークが重複する領域に実際には存在しなかったことが明らかになる前です。イェフダとジェレミーがお互いを通り過ぎて話しているだけで、実際には何も比較していません。
Trek Glowacki
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.