12种JavaScript MVC框架之比较
jopen 12年前
<p> Gordon L. Hempton 是西雅图的一位黑客和设计师,他花费了几个月的时间研究和比较了 12 种流行的 JavaScript MVC 框架,并<a href="/misc/goto?guid=4958340981353627016">在博客中总结</a>了每种框架的优缺点,最终的结果是,<a href="/misc/goto?guid=4958341752970306158">Ember.js</a> 胜出。</p> <p> 此次比较针对的特性标准有四种,分别是:</p> <ul> <li>UI 绑定(UI Bindings)</li> <li>复合视图(Composed Views)</li> <li>Web 表现层(Web Presentation Layer)</li> <li>与其他框架良好协作(Plays Nicely with Others)</li> </ul> <p> 对于各种 JavaScript MVC 框架,Gordon 都总结了优缺点:</p> <ol> <li><a href="/misc/goto?guid=4958319783243894395">Backbone.js</a>——优点:强大的社区,强劲的势头;缺点:抽象较弱,很多功能亟待增加。</li> <li><a href="/misc/goto?guid=4958340968156739267">SproutCore</a>——优点:对绑定的支持,可靠的社区,大量特性;缺点:过度规范,难以和不需要的特性解耦。</li> <li><a href="/misc/goto?guid=4958340968975257781">Sammy.js</a>——优点:易于学习,更容易和现存的服务端应用程序整合;缺点:过于简单,无法应用于大型应用程序中。</li> <li><a href="/misc/goto?guid=4958318094523520882">Spine.js</a>——优点:轻量级,文档很完备;缺点:它的核心概念“spine”是异步的用户界面,这意味着理想状况用户界面永远不会发生堵塞,而这个基础有缺陷。</li> <li><a href="/misc/goto?guid=4958340971333394281">Cappuccino</a>——优点:大型深思熟虑后的框架,良好的社区,很棒的继承模型;缺点:由 iOS 开发者创建,使用 JavaScript 模拟 Objective-C。</li> <li><a href="/misc/goto?guid=4958330844784985666">Knockout.js</a>——优点:对绑定的支持,完备的文档和教程;缺点:绑定语法拙劣,缺少统一的视图组件层级关系。</li> <li><a href="/misc/goto?guid=4958340973592435442">Javascript MVC</a>——优点:可靠的社区;缺点:基于字符串的继承模型很差,控制器与视图关系过密而缺少绑定。</li> <li><a href="/misc/goto?guid=4958198890967175096">GWT(Google Web Toolkit)</a>——优点:全面的框架,良好的社区,可靠的基于 Java 的组件继承模型;缺点:可能无法经受时间的考验,另外,Java 在客户端上的抽象有些笨拙。</li> <li><a href="/misc/goto?guid=4958200219686078247">Google Closure</a>——优点:很好的基于组件的 UI 组合系统。缺点:缺少 UI 绑定支持。</li> <li><a href="/misc/goto?guid=4958340976610047764">Ember.js</a>——优点:很丰富的模板系统,拥有复合视图和 UI 绑定;缺点:相对较新,文档不够完备。</li> <li><a href="/misc/goto?guid=4958340977466482894">Angular.js</a>——优点:对模板范围和控制器设计有很好的考虑,拥有依赖注入系统,支持丰富的 UI 绑定语法。缺点:代码的模块性不强,视图的模块化也不够。</li> <li><a href="/misc/goto?guid=4958328912564440127">Batman.js</a>——优点:代码清晰,绑定、持久化的方法简单;缺点:使用了单例控制器。</li> </ol> <p> 经过对以上各种 Javascript MVC 框架特性的比较,Gordon 认为只有 <a href="/misc/goto?guid=4958340976610047764">Ember.js</a> 能够完全满足他的要求,从而成为他最终选用的框架。</p> <p> 你是否也使用过某些 JavaScript MVC 框架呢?欢迎参与讨论。</p> <div id="come_from"> 来自: <a id="link_source2" href="/misc/goto?guid=4958341763276732841" target="_blank">InfoQ</a> </div>