(译)最流行的10个 Javascript MVC 框架之对比

在过去的数月中,我一直在寻找最完美的javascript MVC框架。出于对一个拥有恰当抽象和较完整功能的js框架的迫切需求,我亲手尝试了下面列出的所有javascript mvc框架。在这里,我列出一份对这些框架的简要介绍和对比。同时,我将会在结尾处告诉大家我最终的选择。

需要提前特别指出的是,下面列出的这四个特性对我来说非常重要:

  • UI绑定 - 这里我并不仅仅只是指前端模板级别的绑定,我更指当model层改变的时候,view层能随之自动更新。如果你曾经使用过支持UI绑定的框架(比方说Flex),你对这点将感到无法割舍。
  • 组合型的Views - 像大多数开发者一样,我喜欢编写模块化、可重用的代码。因为如果这样的话,我就能通过组合的方式来构建view层(尤其是指在写前端模板部分的代码的时候)。当然这需要有一个拥有丰富组件体系的框架来作为支撑。将会有一个与这点相关的例子,是一个分页的小插件,向大家更好的说明这点。
  • Web表现层 - 我们是在写web,最不想做的就是编写传统桌面UI组件之类的事。正因为如此,作为一个web框架,就不当由自己来实现只属于自己的一套布局管理。HTML和CSS本身就是表现布局和展示样式的最好方式,本来就应该用他们才对。作为一个web框架,必须以这点作为基本原则。
  • 与其他框架良好兼容 - 众所周知,jQuery漂亮得令人惊叹。我并不想要一个本身就已经内置包含了jQuery的框架,我更想要一个通过外部引用来链接jQuery的框架。

对比

这里给出了一个表格,可以清晰的看到各个框架对上面四个特性的支持情况。你可以通过点击框架的名字来查看更详细的信息。

框架UI绑定组合型ViewsWeb表现层与其他框架的兼容性
Backbone.js
SproutCore 1.x
Sammy.js
Spine.js
Cappuccino
Knockout.js
Javascript MVC
Google Web Toolkit
Google Closure
Ember.js
Angular.js
Batman.js

1. Backbone.js

Backbone.js 是最流行的js mvc框架。如果没听过它,你将寸步难行。因为有大量的开发者和应用正在使用着它。它也是我一个尝试使用的框架,我用它来为GroupTalent构建一些内部的管理功能。

优点: 强大的社区支持和良好的发展趋势。 Underscore.js(是backbone.js内部实现所极度依赖的js框架) 同样也是一个非常优秀的框架。
确点: 需要更良好的封装,同时很多迫切需要的功能暂未实现。整个框架相当轻量简单以至于它必须通过引用其他外部的库来实现未实现的功能。如果一个项目足够复杂的话,Backbone就显得有些力不从心了。

2. SproutCore 1.x

尽管名字看上去挺讨人厌,但实际上它的设计非常优秀。同时,它也是体积最大的几个框架之一。

优点: 支持UI绑定,良好的社区支持,大量的功能特性。
缺点: 侵入性过大。对于不需要的功能,无法定制。强迫使用原生应用似的规范。对于不直接使用html来作为布局管理的框架,我一向不感冒。

3. Sammy.js

Sammy.js是一个小框架,在我使用它的时候,经常遇到各种小状况。它太简单了,很多功能都没有实现。它最核心的功能就是提供一个route层以便应用通过AJAX来加载数据。

优点: 易于上手,很容易整合到现有的服务端应用。
缺点: 太简单了,不适合大型的应用程序。

4. Spine.js

由名字来看,Spine.js 应该深受backbone影响。像backbone一样,它非常轻量而且有着相似的model层。Spine.js

优点: 轻量而且文档齐全。
缺点:其设计本质上具有缺陷。Spine核心观念之一就是“是异步的UI。用一句话来说,就是UI应该都是非阻塞的。”我在过去曾做过一个对实时和非阻塞要求非常高的应用,我可以负责任地说这是完全不现实的,除非后台有一些类似operational transformation(Google Wave所设计的一个并发控制框架就实现了operational transformation)的东西。

5. Cappuccino

Cappuccino是一个非常特别的框架,特别在它拥有自己的语言Objective-J。Cappuccino想要在浏览器端模拟Cocoa。

优点:设计缜密,良好的社区支持,强大的继承模型。
缺点:假如让我选择使用javascript来模拟其他任何一种语言的话,Objective-C或许是我最不可能作出的决定。这是一个来自于iOS开发者的观点。 我无法赞同在浏览器中运行Object-J。