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