文章来源:http://www.csdn.net/article/2013-04-25/2815032-A-Comparison-of-Angular-Backbone-CanJS-and-Ember
选择JavaScript MVC框架很难。一方面要考虑的因素非常多,另一方面这种框架也非常多,而要从中选择一个合适的,还真得费一番心思。想知道有哪些JavaScript MVC框架可以选择?看看 TodoMVC吧。
我用过其中4个框架:Angular、Backbone、CanJS和Ember。因此,可以对它们作一比较,供大家参考。本文会涉及框架选型过程中需要考虑的一系列因素,我们逐一讨论。
每一个因素我们都会按照1到5分来打分,1分代表很差,5分代表很好。我会尽量保持客观,但也不敢保证真能“一碗水端平”,毕竟这些分数都是根据我个人经验给出的。
功能
作为构建应用的基础,框架必须具备一些重要的功能。比如,视图绑定、双向绑定、筛选、可计算属性(computed property)、脏属性(dirty attribute)、表单验证,等等。还能罗列出一大堆来。下面比较了一些我认为MVC框架中比较重要的功能:
功能 | Angular | Backbone | CanJS | Ember |
可观察对象(observable) | 是 | 是 | 是 | 是 |
路由(routing) | 是 | 是 | 是 | 是 |
视图绑定(view binding) | 是 | 是 | 是 | |
双向绑定(two way binding) | 是 | - | - | 是 |
部分视图(partial view) | 是 | - | 是 | 是 |
筛选列表视图(filtered list view) | 是 | - | 是 | 是 |
- 可观察对象:可以被监听是否发生变化的对象。
- 路由:把变化通过浏览器URL的参数反映出来,并监听这些变化以便执行相应的操作。
- 视图绑定:在视图中使用可观察对象,让视图随着可观察对象的变化而自动刷新。
- 双向绑定:让视图也能把变化(如表单输入)自动推送到可观察对象。
- 部分视图:包含其他视图的视图。
- 筛选列表视图:用于显示根据某些条件筛选出来的对象的视图。
得分
根据上述功能,我打出的分数如下:
有一点必须指出,使用Backbone也能实现上述大多数功能,只是手工编码量挺大的,有时候还要借助插件。这里的打分只考虑了框架核心是否支持某一功能。
Angular | Backbone | CanJS | Ember |
5 | 2 | 4 | 5 |
有时候,框架配合一些现成的插件和库来使用,可能要比使用框架原生同类功能效果更好,而这种插件和库几乎遍地都是(不下数百个),又各有特色。因此,能够把这些库和插件整合到MVC框架中也非常重要。
Backbone是其中最灵活的一个框架,因为它的约定和主张最少。使用Backbone需要你自己作出很多决定。
CanJS的灵活性与Backbone差不多,把它跟别的库整合起来很容易。在CanJS中甚至可以更换其他渲染引擎,我在CanJS中就一直用 Rivets,没有任何问题。不过,我还是推荐框架自带的组件。
Ember和Angular也都还算灵活,可有时候你会发现,就算不喜欢它们的某些实现方法,你也只能默默忍受。 这是在选择Ember或Angular时必须考虑的。
得分
Angular | Backbone | CanJS | Ember |
3 | 5 | 4 | 3 |
Angular
Angular一开始会让人大呼过瘾,因为可以利用它干好多意想不到的事,比如双向绑定,而且学习难度不高。乍一看让人觉得很简单。可是, 进了门之后,你会发现后面的路还很长。应该说这个框架比较复杂,而且有不少标新立异之处。想看着它的文档上手并不现实,因为Angular制造的概念很 多,而文档中的例子又很少。
Backbone
Backbone的基本概念非常容易理解。但很快你会发现它对怎么更好地组织代码并没有太多主张。为此,你得观摩或阅读一些教程,才能知道在Backbone中怎么编码最好。而且,你会发现在有了Backbone的基础上,还得再找一个库(比如 Marionette或 Thorax)跟它配合才能得心应手。正因为如此,我不认为Backbone是个容易上手的框架。
CanJS
CanJS相对而言是这里面最容易上手的。看看它只有一页的网站( http://canjs.com/),基本上就知道怎么做效率最高了。当然,还得找其他一些资料看,不过我个人很少有这种需求(比如看其他教程、上论坛或讨论组提问呀什么的)。
Ember
Ember的上手难度与Angular有一拼,我认为学习Ember比学习Angular总体上容易一些,但它要求你一开始就要先搞懂一批基本概念。而Angular呢,一开始不需要这么费劲也能做一些让人兴奋不已的事儿。Ember缺少这种前期兴奋点。
得分
Angular | Backbone | CanJS | Ember |
2 | 4 | 5 | 3 |
比较全面地掌握了一个框架之后,重点就转移到了产出上。什么意思呢?约定啊、戏法啊,反正要尽可能快。
Angular
熟悉Angular之后,你的效率会非常高,这一点毋庸置疑。之所以我没给它打最高分,主要因为我觉得Ember的开发效率似乎更胜一筹。
Backbone
Backbone要求你写很多样板(boilerplate )代码,而我认为这完全没必要。要我说,这是直接影响效率的一个因素。
CanJS
CanJS的开发效率属于不快不慢的那种。不过,考虑到学习难度很低,因此适合早投入早产出的项目。
Ember
Ember的开发效率首屈一指。它有很多强制性约束,可以帮你自动完成的事很多。而开发人员要做的,就是学习和应用这些约定,Ember会替你处理到位。
得分
Angular | Backbone | CanJS | Ember |
4 | 2 | 4 | 5 |
能轻易找到参考资料和专家帮忙吗?
Backbone的社区很大,这是人所共知的事实。关于Backbone的教程也几乎汗牛充栋,StackOverflow和IRC社区非常热闹。
Angular和Ember社区也相当大,教程什么的同样不少,StackOverflow和IRC也很热闹,但还是比不上Backbone。
CanJS社区呢,相对小一些,好在社区成员比较活跃,乐于助人。我倒没发现CanJS社区规模小有什么负面影响。
得分
Angular | Backbone | CanJS | Ember |
4 | 5 | 3 | 4 |
有没有插件或库构成的生态系统?
说起插件和库,Backbone的选择是最多的,可用插件俯拾皆是,这一点让其他框架都望尘莫及。Angular的生态圈加上Angular UI还是很令人瞩目的。我觉得Ember的下游生态虽然欠发达,但Ember本身很受欢迎, 所以前景十分乐观。CanJS的下游支脉比较少见。
得分
Angular | Backbone | CanJS | Ember |
4 | 5 | 2 | 4 |
这个因素有时候很重要,特别是对于移动开发项目。
自身大小(无依赖,未压缩)
Angular | Backbone | CanJS | Ember |
80KB | 18KB | 33KB | 141KB |
Backbone最小,这一点也是最为人们所津津乐道的。但不能只看库本身的体积。
包含依赖的大小
80KB的Angular是唯一不需要其他库就能使用的。其他三个框架则都对其他库有依赖。
Backbone至少需要Underscore和Zepto。虽然在Underscore中可以使用最小的模板来渲染视图,但多数情况下,还要借助更好的模板引擎,比如Mustache。这样它就增肥到了61KB。
CanJS至少需要Zepto,因此会达到57KB。
Ember需要jQuery和Handlebars,总共是269KB。
Angular | Backbone | CanJS | Ember |
80KB | 61KB | 57KB | 269KB |
得分
Angular | Backbone | CanJS | Ember |
4 | 5 | 5 | 2 |
我不认为性能是选择框架的关键因素,因为这些框架在预期应用领域中的性能都不差。当然啦,具体还得看你做什么项目。要是想开发游戏,那性能是个重要因素。
虽然我见过,也亲自做过一些性能对比(比如这个测试),但我并不完全相信测试结果。很难说这种测试的方法和结果与实际项目吻合。
不过,据我所见所闻,CanJS的性能是最高的,而且在视图绑定上格外突出。相对来说,我觉得Angular性能稍差,因为它执行对象的脏检查(dirty checking),这一点就拖了它的后腿了。参见这里。
得分
Angular | Backbone | CanJS | Ember |
3 | 4 | 5 | 4 |
这个框架成熟吗,经过实际检验了吗,有多少网站在用它呢?
使用Backbone的网站不计其数。最近两年,它的核心代码没怎么改过,这是成熟的一个重要标志。
Ember已经不是新框架了,但它的重大变更还是经常有,前几月刚刚稳定下来。因此,目前还不能说它是个成熟的框架。
Angular似乎比Ember更稳定,验证的示例也更多,但不能与Backbone相提并论。
CanJS好像还未经任何验证,因为不知道有什么网站在使用它。不过,CanJS其实也没有看起来那么弱不经风,它可是从JavaScriptMVC精简来的。JavaScriptMVC是2008年就出现的一个库,因此会有很多智慧结晶留传下来。
得分
Angular | Backbone | CanJS | Ember |
4 | 5 | 4 | 3 |
内存泄漏隐患
如果你想开发每次打开都得运行很长时间的单页应用,这是必须得考虑的问题。你当然不希望自己的应用导致内存泄漏,这个问题非常现实。不幸的是,内存泄露很容易发生,而自己编写的DOM事件监听器则是重灾区。
只要你守规矩,Angular、CanJS和Ember能把这个问题帮你解决好。Backbone则不然,它需要你自己手工来卸载。
得分
Angular | Backbone | CanJS | Ember |
5 | 3 | 5 | 5 |
本项没办法打分。
- 你喜欢声明式HTML吗?-> Angular
- 你喜欢使用模板引擎吗?-> Backbone、CanJS或Ember
- 你喜欢固执已见的框架吗?-> Ember
- 你希望框架与最初的SmallTalk MVC模式完全吻合吗?-> 没有完全吻合的,或许CanJS最接近
- 你希望使用目前看来很酷的框架吗?-> Ember、Angular
算总分
好啦,把各框架所得分数做个汇总吧。别忘了这只是我个人看法,如果你觉得哪一项打分有失偏颇,请务必告诉我
相关推荐
例如,Backbone.js、Angular.js、Ember.js、Javascript MVC和Knockout.js等都是著名的前端MVC框架,它们各自具有独特的特性和优势,以适应不同的开发需求。 2. MVC模式的基本构成 - Model(模型):模型层负责处理...
JavaScript MVC 框架的向导模式。 构架 主干.js Backbone.js + Require.js Marionette.js Ember.js Angular.js 开始 首先,运行npm start或node server.js 。 您的浏览器将自动打开 。 执照 麻省理工学院许可证...
JavaScript MVC框架是现代Web前端开发中广泛使用的架构模式,其核心目的是为了实现前端界面与业务逻辑的有效分离。MVC即Model-View-Controller的缩写,分别代表数据模型、视图和控制器。在JavaScript中,有多种MVC...
JavaScript MVC框架如Angular、Ember.js或Backbone.js,它们为创建复杂、交互式的Web应用提供了强大的工具。这些框架提供了一套完整的机制,帮助开发者更高效地组织代码,实现MVC架构。 LAF1507MVC这个文件名可能是...
在JavaScript环境中,实现MVC模式的库或框架有Backbone.js、Ember.js或者AngularJS等。 基于以上分析,我们可以推断这个"AdminLTE-MVC-Morlet"项目是一个使用JavaScript技术,基于AdminLTE模板,并采用MVC设计模式...
本课程主要关注三大流行的 JavaScript 框架:Angular、Backbone 和 Ember。这些框架各自具有独特的优势和设计哲学,适应不同类型的项目需求。 首先,Angular 是由 Google 开发的一个全面的 MVC(Model-View-...
4. Ember.js:全面的MVC框架,具有严格的约定和强大的工具链,适用于复杂应用的开发。 5. Backbone.js:轻量级框架,提供Model-View-Collection模式,适合快速原型开发。 三、选择框架的考虑因素 1. 项目需求:根据...
JavaScript是一种广泛应用于Web开发的脚本语言,与Java虽然名字相似,但两者并无直接关系。JavaScript经典框架在Web开发中扮演着至关重要的角色,它们极大地提高了开发效率,提供了丰富的功能和优秀的用户体验。在这...
除此之外,还有许多其他优秀的JavaScript框架和库,如Vue.js、Ember.js、Node.js(后端JavaScript运行环境)、Express.js(Node.js的Web应用框架)、Webpack(模块打包工具)和Babel(JavaScript编译器,用于处理ES6...
- **Backbone.js**:轻量级 MV* 框架,强调 MVC 架构。 #### 五、JavaScript 的应用场景 1. **动态效果**: - 操作 HTML 元素的显示和隐藏。 - 调整滚动条位置、改变背景颜色等。 2. **交互效果**: - 拖拽...
- **特点**:Backbone是一个轻量级的MVC框架,提供了基本的模型、集合和视图概念,适合希望拥有更多自由度的开发者。虽然它的灵活性高,但也意味着开发者需要自己处理更多细节。 - **应用场景**:适用于需要高度...
2. **MVC(Model-View-Controller)框架**:如Ember.js和Backbone.js,提供了一种结构化的开发模式,帮助开发者组织代码。 3. **库或轻量级框架**:如jQuery和Prototype,提供了一些DOM操作和事件处理功能,相对较...
使用过JavaScript框架(如AngularJS,Backbone或者Ember)的人都很熟悉在UI(用户界面,前端)中mvc的工作机理。这些框架实现了MVC,使得在一个单页面中实现根据需要变化视图时更加轻松,而模型-视图-控制器(mvc)的...
自Django 创建以来,各种各样的开源社区已经构建了很多Web 框架,比如JavaScript 社区创建的Angular.js 、Ember.js 和Backbone.js 之类面向前端的Web 框架,它们是现代Web 开发中的先驱。Django 从哪里入手来适应...
* MVC/MVVM/MVW框架:Angular.js、Backbone.js、Knockout/Ember * 常用库:React.js、Vue.js、Zepto.js 第八阶段:HTML5原生移动应用开发 * Cordova:WebApp/NativeApp/HybirdApp简介、Cordova简介、与PhoneGap...
在实际开发中,结合MVC框架(如AngularJS、Ember.js或Backbone.js)和UI库如Leonardo UI,可以帮助开发者高效地创建出与Qlik Sense风格一致的Web应用程序,同时利用MVC架构的优点来提高代码的组织性和可维护性。...
Backbone、Ember、AngularJS……新的和稳定的解决方案的列表不断增加,但你如何决定在这么多选择的海洋中使用哪个? 为了帮助解决这个问题,我们创建了 TodoMVC——一个提供相同 Todo 应用程序的项目,该应用程序...