与流行的观点相反,Ember.js 并不是 Backbone.js 的“重量级方法”。它们是针对完全不同的最终产品的不同类型的工具。Ember 的最佳点是用户将应用程序长时间保持打开状态的应用程序,可能是一整天,并且与应用程序视图或底层数据的交互会触发视图层次结构的深刻变化。Ember 比 Backbone 大,但多亏了Expires
,Cache-Control
这仅在第一次加载时很重要。经过两天的日常使用,额外的 30k 将被数据传输所掩盖,如果您的内容涉及图像,则更快。
Backbone 非常适合具有少量状态的应用程序,其中视图层次结构保持相对平坦,并且用户倾向于不经常访问应用程序或访问时间较短。Backbone 的代码变得简短而甜蜜,因为它假设支持 DOM 的数据将被丢弃,并且这两个项目都将被内存收集:https ://github.com/documentcloud/backbone/issues/231#issuecomment-4452400 Backbone 的较小尺寸也使其更适合简短的交互。
人们在这两个框架中编写的应用程序都反映了这些用途:Ember.js 应用程序包括Square 的 Web 仪表板、Zendesk(至少是代理/票务界面)和Groupon 的调度程序:用户可能整天都在使用的所有应用程序。
Backbone 应用程序更侧重于简短或随意的交互,这些交互通常只是较大静态页面的一小部分:airbnb、可汗学院、Foursquare 的地图和列表。
您可以使用 Backbone 来制作 Ember 所针对的应用程序类型(例如Rdio),方法是 a) 增加您负责的应用程序代码量以避免内存泄漏或僵尸事件等问题(我个人不推荐这种方法)或者 b) 通过添加诸如主干.marionette或Coccyx 之类的 3rd 方库——这些库中有许多都试图提供类似的重叠功能,您最终可能会组装自己的自定义框架,该框架更大并且需要更多的胶水代码如果您刚刚使用过 Ember。
最终,“使用哪个”的问题有两个答案。
首先,“在我的职业生涯中,我通常应该使用哪个”:两者都一样,就像您最终会学习任何特定于您将来想做的工作的工具一样。你永远不会问“Backbone 还是 D3?”;“骨干还是余烬”是一个同样愚蠢的问题。
第二,“我应该在下一个项目中具体使用哪个”:取决于项目。两者都可以同样轻松地与 Rails 服务器通信。如果您的下一个项目涉及由服务器生成的页面与 JavaScript 提供的所谓“丰富岛”的混合,请使用 Backbone。如果您的下一个项目将所有交互推送到浏览器环境中,请使用 Ember。