web-dev-qa-db-ja.com

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

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

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

それでは、より良い選択は何ですか?フロントエンドとバックエンドを接続する多くの例もありません。これに対するバックエンドの残りの呼び出しの良い例は何ですか:

URI:../restapi/topics GET認証資格情報の取得:admin/secrect形式:json

98
Robin Wieruch

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

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

両方のフレームワークで作成するアプリは、これらの用途を反映しています:Ember.jsアプリには、 SquareのWebダッシュボードZendesk (少なくともエージェント/チケットインターフェイス)、および Grouponのスケジューラー :ユーザーが1日中作業に費やす可能性のあるすべてのアプリケーション。

バックボーンアプリは、より大きな静的ページの小さなセクションであることが多い短いまたはカジュアルな対話に重点を置いています。 airbnbKhan AcademyFoursquareのマップとリスト

あなたはcanBackboneを使用して、Emberターゲット(例 Rdio )a)メモリリークやゾンビイベントなどの問題を回避するために担当するアプリケーションコードの量を増やす(個人的にはこのアプローチはお勧めしません)またはb) backbone.marionetteのようなサードパーティライブラリを追加する または Coccyx –これらのライブラリの多くはすべて同様の重複する機能を提供しようとするため、おそらく、より大きく、より多くのグルーコードを必要とする独自のカスタムフレームワークを組み立てることになります。 Emberを使用しました。

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

最初に、「一般的に、私のキャリアで使用すべきもの」:両方、あなたが将来やりたいと思う仕事に特有のツールを学ぶことになります。 「Backbone or D3?」と尋ねることはありません。 「バックボーンまたはエンバー」も同様に愚かな質問です。

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

257
Trek Glowacki

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

より複雑な答えをするために:それは本当にあなたが何をしているかに依存します。他の人が言ったように、Emberはさまざまな目的のために設計されており、さまざまな人々にアピールします。私の簡単な答えは、RESTful要件を含めることに基づいています。

現時点では、Ember-Data(Ember内のデフォルトの永続化メカニズムと思われる)は、本番環境にはほど遠い状態です。これが意味することは、非常に多くのバグがあり、決定的に、ネストされたURI(/ posts/2/comments/4556など)をサポートしていないことです。 RESTが要件である場合、Emberを選択した場合、当面の間これを回避する必要があります(つまり、ハックして、待機して、実装する必要があります) Ember-Dataのようなものを自分でゼロから作成するか、非常にRESTfulではないURIを使用します)。 Ember-Dataは厳密にはEmberの一部ではないため、これは完全に可能です。

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

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

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

更新:最近、EmberはネストされたURIをサポートするようになったようです。そのため、あなたはどの程度の魔法が好きで、Emberは、設計上、アプリに最適です。

26
bengillies

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

基本的にBackboneは多くのことをしません。それが私がそれを愛している理由です。あなたはたくさんのコードを書かなければなりませんが、正しい場所でコーディングします。 Emberは多くのことを行うので、それが何をしているのかを見る方が良いでしょう。

サーバーディスカッションは、Backboneが行う数少ないことの1つであり、Backboneで素晴らしい仕事をします。ですから、Backboneから始めて、Emberを試してみてください。完全に満足できない場合。

this podcast を聴くこともできます。Backboneの作成者であるJeremy AshkenasとEmberのメンバーであるYehuda Katzは、ニースディスカッション

3
Nicolas Zozol