12款优秀JavaScript MVC框架评估

标签: 工具与框架 javascript,js,Backbone js,Javascript MVC | 发表时间:2012-05-22 11:00 | 作者:Ray_tiger
出处:http://www.webapptrend.com

导读:在最近的几个月中,作者一直在寻求哪种MVC框架最为完美:将目前能获取到的所有框架都粗略地试了试,然后在文章中列出了每一种框架的情况概要,在文末分享了作者经过对比之后最终的推荐产品。

 

首先要特别说明一下,以下四个feature作者认为是十分重要的:

  • UI Bindings:[UI绑定]作者想说的不仅仅是模板,而是想谈一种在底层模型出现变化时,视图层能够自动相应地更新的陈述性方法。一旦您用过了支持UI Binding的框架(例如Flex)就很难放手回头了。
  • Composed Views:[模块化视图]与所有的软件开发者一样,作者也喜欢编写模块化、可重用的代码。基于这样的原因,当给UI编程的时候,作者喜欢使用视图的方法来创作(个人更偏好在模板层时使用),当然这样也就需要拥有足够丰富的视图组件来支持。关于这一点有一个可重用的页面小工具的范例。
  • Web Presentation Layer:[web表示层]我们是在为web编写程序,最不想要的就是Native风格的小工具;但是也没有什么理由来为一个web框架来创建它自己的布局管理器。HTML和CSS是目前解决样式与布局的最好的方法,他们被这样应用着,框架也应该以这一点为核心。
  • Play Nicely With Others:[兼容,友好]不得不承认,jQuery是十分犀利的。作者不喜欢那种绑定着一个sub-par jQuery副本的框架,而直接推荐使用jQuery的那种框架才是作者需要的。

竞品们

下面这个表格列出了12个框架对于上述几种特性的支持关系,在后面的部分会详细叙述,您也可以在之后的文章中点击相应的链接来获取更多的信息。

 

 

 

 

 

1. Backbone,js

Backbone.js是web最火的框架,如果不了解它将寸步难行,众多知名品牌均支持该框架,令人印象深刻,自然地成为作者最先进行尝试的框架。作者用它来建造了一个 Group Talent内部用行政管理方面功能的feature应用。

优点:强大的社区,还有大量的实力支持。例如它本身就较多地使用了Underscore.js(也是一个强大的框架)。

缺点:抽象功能不够强,以及一些需要的功能还没实现。整个框架十分轻量级,产出的结果是一大堆引用文件和样板:而且应用的规模越大这一点就会越明显。

2. SproutCore 1.x

SproutCore最开始是苹果公司用于其iCloud上面的。除了名字起得很不好之外,它实际上是一个非常优秀的框架,也是最大的框架之一。

优点:支持绑定,忠实的社区粉丝,优秀的feature很多。

缺点:过于死板,难以去除无用的feature,强制使用一种Native风格的范例,严重的问题在于该框架不允许使用HTML来做布局。

3. Sammy.js

Sammy是作者偶然发现的一个比较小的框架,因为它太简化了,基本不能占据列表的席位。其核心feature是一个路由系统,让应用与AJAX进行交换。

优点:简单的学习曲线,与服务器端的app集成更加容易。

缺点:太过于简单,对于大型应用就有些捉襟见肘。

4. Spine.js

器如其名, Spine显然是受到Backbone的强烈影响,像Backbone一样也是一个非常轻量级的框架,遵循相似的模型。

优点:轻量级,文档做得很好。

缺点:从根本上就有缺陷。Spine的一个核心概念是“一个坚果外壳中的一堆异步的UI集,这意味着UI应该是在理想化条件下永远不会阻塞的”。而做了一系列的非阻塞式实时应用之后,作者可以说这简直是不现实的,除非后端是像 Operational Transformation之类的。

5. Cappuccino

Cappuccino是一款更加独特的框架,自带编程语言Objective-J,还能尝试着在浏览器中仿真Cocoa。

优点:大型的构想出的框架,良好的社区环境,强大的继承模型。

缺点:在您所有能用Javascript仿真的语言之外,Objective-C是作者最不想选用的。它起源一位iOS开发人员,作者到现在还没想明白用浏览器编写Objective-J是什么意思。

6. K nockout.js

K.O.是一个MVVM框架,受到其支持者的大量好评。它强调陈述式UI绑定和自动UI刷新。

优点:支持绑定,文档做得出色,引导系统超级赞。

缺点:绑定语法晦涩,缺乏坚实的视图组件层次结构。作者希望能够轻松地重用组件,也觉得定义成一个MVVM框架是有害的。这些框架中基本没有MVC,但都是(MVP,MVVM之类的)的变种。

7. Javascript MVC

作者的兴趣是充分地披露各种框架,对Js MVC并没有花太多时间来评估。

优点:坚实的社区基础和积累。

缺点:基于Strings的继承模型很尴尬,控制器太接近视图又缺乏绑定机制。命名方式太不受保护了,相当于这样的情况:如果RoR可以说是“Rudy web Framework”的简写。

8. Google Web Toolkit

GWT是一系列的客户端工具包,除了框架之外还包含很多其他工具。它可以把java语言编译成Javascript,支持标准Java库的一个子集,最初是Google公司使用在Wave上面的。

优点:综合宽泛的框架,拥有强大的社区支持。基于Java的坚实组件继承模型,在巨型客户端应用上表现出色。

缺点:除了Google说的之外,GWT将经不住时间的检验。就好像最初 DART那样,很明显Java不是web的未来。更严重的是,客户端对于Java的抽象有一点不合适。

9 . Google Closure

如果说Google Closure仅仅是一个js框架,倒不如说更像是一个工具包。附带编译器和优化器。

优点:由Google用在其很多主流app上面。良好的基于组件的UI编写系统。

缺点:不支持UI绑定。

10. Ember.js

Ember(早起是SproutCore 2.0)是竞争者中的新丁。它是一个尝试:从SproutCore2.0中抽取分离其核心feature并转变成为一个更加紧凑的模型框架,更加适合web。

优点:特别丰富的模板系统,拥有可编写的视图和UI绑定。

缺点:由于太新,文档跟不上。

11. Angular.js

Angular是在作者发布评估结果之后才发现的一个很好的框架,由Googler开发,包含了很多有趣的设计选择。

优点:关于模板的范围和控制器的设计考虑的很周到。具有依赖注入系统(作者本人是一个iOS粉丝)。支持丰富的UI绑定语法,从而使得过滤和转换这样的工作开销很小。

缺点:代码库很不健全,也不够模块化。视图也不够模块化(关于这点在 Batman.js的缺陷中讨论的更加细致)

12. Batman.js

Batman由Shopify创作,是另一款与Knockout和Angular具有相似脉络的框架。Batman拥有良好的UI绑定系统,是基于HTML属性的。Batman是唯一的一款使用惯用语法Coffeescript编写的框架,并且紧密地与NODE.Js集成在一起,甚至可以到拥有其(可选的)Node.js服务器的程度。

优点:代码库十分清晰,绑定方法优良又简单,耐用,流程化。

缺点:作者非常不喜欢这种“独行侠”式的作风,更不用说这种加强单一控制器的主意了。与Knockout和Angular一样,在组件嵌套的时候遭受同样的折磨。作者需要的不仅仅是模板,还更想要陈述式的可重用的模板框架。相比,Ember在框架之上拥有的是一个基于EMBER他们自己的逻辑(可能是在控制器层上的)的整套组件能陈述式重用的方法。

 

赢家

最终,Ember.js是能满足作者全部需求的唯一一款框架。最近作者将一个小的Backbone应用转换成了Ember来实验,除了一些性能方面的小问题之外,作者对于产生的代码库更为欣慰。由 Yehuda Katz支持,整个围绕Ember.js技术讨论社区也十分奇妙:这一定会是一个值得期待的好框架。

当然这个列表还是不够全面。几乎所有这些框架都被发现被人骂得臭名昭著体无完肤,或者口头传播,或者被 Kacker News点名。作者本人并不是评估其框架的专利权问题(或者哪些使用令人不爽的license的框架)。

您用的MVC框架是哪一款呢?

翻译:范小虎

原文地址: http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/

关于作者:Gordon L. Hempton来自西雅图.WA地区,一位黑客/自我宣传设计者, GroupTalent的创始人。

 

 

您可能也喜欢:

使用JavaScript实现Motion Detection

可汗学院试行新教育方式,JavaScript将成为计算机学习第一语言

Javascript不可用的问题探究

2011回顾:20个将JavaScript推到极致的网站
无觅

相关 [javascript mvc 框架] 推荐:

12款优秀JavaScript MVC框架评估

- - Web App Trend
导读:在最近的几个月中,作者一直在寻求哪种MVC框架最为完美:将目前能获取到的所有框架都粗略地试了试,然后在文章中列出了每一种框架的情况概要,在文末分享了作者经过对比之后最终的推荐产品. 首先要特别说明一下,以下四个feature作者认为是十分重要的:. UI Bindings:[UI绑定]作者想说的不仅仅是模板,而是想谈一种在底层模型出现变化时,视图层能够自动相应地更新的陈述性方法.

JavaScript 客户端 MVC 框架调查

- - 博客 - 伯乐在线
来源: IBM DeveloperWorks. 15 年前,许多人都使用 Perl 和 ColdFusion 之类的工具构建网站. 我们经常编写可以在页面顶部查询数据库的脚本,对数据应用必要的转换,以及在同一个脚本底部显示数据. 这类架构适合于向网站添加简单的 “Contact us” 表单. 然而,随着应用程序变得更加复杂,这种方法无法进行相应的扩展来处理更大的复杂问题.

【转载】12种JavaScript MVC框架之比较

- - HTML5研究小组
侯伯薇 发布于 2012年5月29日. Hempton是西雅图的一位黑客和设计师,他花费了几个月的时间研究和比较了12种流行的JavaScript MVC框架,并 在博客中总结了每种框架的优缺点,最终的结果是, Ember.js胜出. 此次比较针对的特性标准有四种,分别是:. UI绑定(UI Bindings).

PHP的MVC开发框架 EaglePHP

- We_Get - 开源中国社区最新软件
EaglePHP是一个简单、开源、高效、易扩展、面向对象的PHP MVC开发框架,借鉴国外优秀框架的设计思路,分层的设计思想使独立开发成为可能,建立模型推动代码的重用. 写此框架的用意是与大家共同学习和交流. 框架特点: 1、数据库表曾、删、改、查,自动生成,支持二次开发. 2、支持session在Memcahe、database、file中的无缝切换.

MVC框架的映射和解耦

- - 博客 - 伯乐在线
最近在写一个业务上用到的框架,回想起接触过的一些MVC框架,尤其是主要贡献在后端表现层上的那些,它们之间有太多的相似,在不断解耦的过程中,层数和模块数也越来越多,需要不断引入层与层之间的映射逻辑将不同层次之间关联起来,我们不妨来查看一下这个过程,能否寻找一些MVC框架的共性和启示. MVC 1到MVC 2模型的进化.

[Ext JS 4] MVC 应用程序框架

- - CSDN博客Web前端推荐文章
大型客户端应用程序总是很难编写,很难组织和很难维护. 随着功能的增加和更多的开发人员加入项目,对项目的控制也越来越困难了. Ext JS 4 提供了一个新的应用程序框架帮助组织代码. 模型 - 一组栏位和数据的集合. Model (在Ext JS 3中使用Record class). 视图 - 组件类型, grids,trees 和 panels 都是属于试图.

15 个微型 JavaScript 框架

- - HTML5研究小组
倘若问Web 开发者最喜欢的 JS 库是什么,多数回答都是 jQuery,不管其所做的网站是大是小. 开发者倾向使用 jQuery 的原因是它可以降低代码的复杂度,而且 jQuery 经过良好的测试,拥有大量用户以及很好的社区生态,当然,还有大量的插件. 不过 jQuery 的体积比较大,本文即将介绍的是 15 个微型的 JavaScript 小框架,这些框架都支持 Web 和智能手机平台,短小精干.

酷酷的前端MVC框架AngularJS(二)HelloWorld

- - ITeye博客
angularJS在github上面进行一个代码的托管. 地址:https://github.com/angular/angularjs.org  . 注意:需要兼容IE8的同学请下载1.3之前的版本,在1.3之后已经放弃了IE8,估计是为了以后大版本升级做铺垫吧. 各个版本的下地址在这里https://github.com/angular/angular.js/releases.

5个实用的Javascript框架

- cchitsiang - 伯乐在线 -博客
  Web开发很简单,Web应用的UI开发却很复杂,如果能够利用一些成熟的框架,可以大大的减少开发的复杂度. 国外开发人员Kiko在本文向你介绍5个很不错的JS框架.   ExtJS 主要用来开发RIA富客户端的AJAX应用,主要用于创建前端用户界面,与后台技术无关的前端ajax框架. 因此,可以把ExtJS用在.Net、 Java、Php等各种开发语言开发的应用中.

16个最流行的 JavaScript 框架

- Phineux - cnBeta.COM
这篇文章列举了当下最流行的16个 JavaScript 框架,既包含 jQuery 和 Mootools 等常规框架,也有Zepo这种支持智能手机触摸功能的移动JavaScript框架,如果你有更好的框架推荐,欢迎与我们分享.