Ember.js或Backbone.js用于Restful后端

Rob*_*uch 98 rest frontend ruby-on-rails backbone.js ember.js

我已经知道,与backbone.js相比,ember.js是一种更重量级的方法.我读了很多关于两者的文章.

我问自己,哪个框架更容易作为铁轨休息后端的前端.对于backbone.js,我看到了不同的方法来调用休息后端.对于ember来说,似乎我必须包含更多的库,如'data'或'resources'.为什么有两个库?

那么更好的选择是什么?还有很多例子可以将前端与后端连接起来.什么是后端休息呼叫的良好工作示例:

URI:../ restapi/topic GET auth凭证:admin/secrect格式:json

Tre*_*cki 257

与流行的观点相反,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,Khan Academy,Foursquare的地图和列表.

可以使用Backbone来制作Ember目标的应用程序(例如Rdio)a)增加你负责的应用程序代码量,以避免内存泄漏或僵尸事件等问题(我个人不推荐这种方法)或者b)通过添加第三方库,如backbone.marionetteCoccyx - 有许多这些库都试图提供类似的重叠功能,你可能最终会组装自己的自定义框架,这个框架更大,需要更多的胶水代码.如果你刚刚使用了Ember.

最终,"使用哪个"的问题有两个答案.

首先,"我应该在我的职业生涯中使用哪种方式":两者,就像你最终将学习任何特定于将来你想做的工作的工具一样.你永远不会问"Backbone还是D3?"; "Backbone或Ember"是一个同样愚蠢的问题.

第二,"我应该使用哪个,特别是我的下一个项目":取决于项目.两者都可以轻松地与Rails服务器通信.如果您的下一个项目涉及由服务器生成的混合页面以及由JavaScript提供的所谓"富裕岛",请使用Backbone.如果您的下一个项目将所有交互都推送到浏览器环境中,请使用Ember.

  • 如果你去看看Ember打算帮助创建的实际应用程序,你会发现没有逃避那些讨厌的kbs.要么它们来自Ember,你的应用程序代码较小,要么它们来自主干插件,或者它们来自你自己编写的代码.[Wunderlist](http://www.wunderlist.com/),你认为这将是"简单"的时钟,大约300kb的转移.我想它的尺寸与Ember的尺寸相似,可能更小 - 从来没有写过完全复制的Wunderlist我不能100%肯定地说. (11认同)
  • "你永远不会问Backbone或D3" - 当然,但我可以很容易想象一个项目,我将D3与Backbone一起使用.想象一个Backbone和Ember在一个页面上一起使用的项目可能要困难得多.所以,我发现"Backbone或Ember"这个问题非常公平.这是另一篇我发现非常有用的帖子,因为它更深入地比较了这两个框架:http://net.tutsplus.com/tutorials/javascript-ajax/game-on-backbone-and-ember/ (9认同)
  • 很棒的回应,Trek.只想在这里评论一下,"Expires"和"Cache-Control"的帮助远远低于人们的想法 - 特别是在经常忽略它们的移动设备方面.我记得iOS的一个版本完全忽略了它们(但仍然会监听HTML5缓存清单).此外,这些标头值在用户首次访问时无效 - 这通常是决定用户是否会停留并使用您的应用程序的最关键因素.说所有30kb的文件差异对我来说似乎没什么大不了的.这是原始的还是缩小的和30k的差异? (4认同)
  • Trek,您可以通过分析在具有扩展使用模式和复杂状态管理的应用程序中使用Backbone进行分析.我经历了将遗留应用程序转换为Backbone的经验,并且必须完全按照您列出的内容进行操作.我们需要整合Marionette以及编写大量的胶水代码,例如路径前/后路径过滤,内存泄漏缓解和更好的事件管理. (2认同)

ben*_*ies 26

简要回答一下:对于RESTful后端,目前应该使用Backbone.

给出一个更复杂的答案:这实际上取决于你在做什么.正如其他人所说,Ember是针对不同的事物设计的,并且会吸引不同的人群.我的简短回答是基于您包含RESTful要求.

目前,Ember-Data(它似乎是Ember中的默认持久性机制)还远未准备好生产.这意味着它有很多错误,而且至关重要的是,它不支持嵌套的URI(例如/ posts/2/comments/4556).如果REST是你的要求,那么如果你选择Ember,你将不得不暂时解决这个问题(即你要么必须破解它,等待,自己从头开始实施类似Ember-Data的东西,或者不要使用-very-RESTful URIs).Ember-Data并不是Ember的严格组成部分,所以这是完全可能的.

除了尺寸之外,两者之间的主要区别基本上是:

Ember尝试尽可能多地为您做,这样您就不必编写尽可能多的代码.它是非常分层的,如果你的应用程序也是非常分层的,可能会很合适.因为它对你有很大帮助,所以很难弄清楚错误来自何处以及为什么会出现意外行为(有很多"魔法").如果您的应用程序自然适合Ember期望您构建的应用程序类型,那么这可能不会成为问题.

Backbone尝试尽可能少地为您做,以便您可以推断出正在发生的事情并构建适合您的应用程序的架构(而不是构建适合您正在使用的框架的体系结构的应用程序).开始使用起来容易得多,但除非你小心,否则很快就会陷入混乱.它没有做像计算属性,自动解除绑定事件等的东西,并且留给你,所以你需要自己实现很多东西(或者至少选择那些为你做这些的库),尽管那是而是整点.

更新:看来,截至最近,Ember现在支持嵌套的URI,所以我想问题是你喜欢多少魔法以及Ember是否适合你的应用程序.

  • "至关重要的是,不支持嵌套的URI(例如/ posts/2/comments/4556)"这是几周前的相关提交:https://github.com/emberjs/data/commit/d870297de41e6f6eee2f26880e1657c622ff5bc1.它知道很难跟上快速发展的预发布框架,但在与权威人士交谈并提供建议时我们应始终追求准确性! (5认同)