您的问题涉及内容太多,答案不会简单且不会明确。它也会非常主观化。从您提供的框架列表中看到,有些东西是很难相互比较的。我将尝试对它们进行分类并添加更多框架到列表中。
这里的主要问题不是特定框架的优缺点。主要问题是:您需要多少?您真的需要像 Gmail 或 Grooveshark 那样的应用程序吗?还是您需要像 Stackoverflow 这样的动态而不简单但仍然是网站。让我们考虑所有这些选项。
也许,您只想使用一些小部件来增强您的网站,例如标签页、对话框、一些可拖放元素、文本编辑等,并且您不希望改变您的开发模式。我的意思是,您使用您最喜欢的 Java/PHP/Ruby 并且不希望在 JavaScript 中编写大量应用程序的逻辑和行为。在这种情况下,基于 jQuery 的插件解决方案将适合您,特别是
jQuery UI 和
jQuery Mobile。
jQuery小部件遵循其插件系统。这通常意味着它们非常易于使用。要创建一个按钮,您可以编写以下代码:
$('#myButton').button();
现在如果您想禁用它,可以使用以下模式调用一个方法:
$('#myButton').button('disable');
而获取或设置值,例如在滑块或日期选择器上,看起来像这样:
$('#mySlider').slider('value');
$('#mySlider').slider('value', 42);
如您所见,基于jQuery的解决方案没有模型。所有数据都保存在DOM中,并通过奇怪的方法调用获得。如果您需要动态处理数据,例如进行一些复杂的验证、在后台加载某些内容、过滤或排序,那么很快就会变得混乱。顺便说一下,这就是为什么jQuery UI团队尚未提供网格控件的问题 - 他们无法在没有模型的情况下完成它。在jQuery Mobile中,您可以通过简单的标记获得漂亮的移动UI,但是没有官方方法在页面之间传递数据。
总结一下:如果您拥有一个多页面的网站,并且提交表单,则使用jQuery UI或类似
Twitter Bootstrap的轻量级解决方案。
也许,您想构建更复杂、更像应用程序的东西(单页应用程序?)。您知道自己需要在客户端上处理数据。那么您有哪些选择呢?
您可以使用许多JavaScript框架,这些框架提供了模型、数据绑定和可能其他创建Web应用程序的方法,并将它们与jQuery UI集成。或者您可以使用更完整的框架,如
Kendo或
Wijmo或
jqWidgets。这些框架依赖于jQuery(Wijmo依赖于jQuery UI),并提供了其他的数据操作方式。它们都有数据模型。Kendo实现了自己的解决方案(我想是这样的),而Wijmo和jqWidgets则与流行的Knockout JS集成。
因此,Kendo和Wijmo属于同时提供小部件/控件和一些支持模型的框架组。还有其他类似的框架,不基于jQuery,例如
Dojo Toolkit。添加一些动态数据加载,您将获得一个稍微复杂的Web应用程序。您还能希望什么呢?
实际上,最重要的事情被忘记了——你如何构建(组织)你的应用程序?如果你试图构建一个与服务器以RESTful方式通信的单页应用程序,那么如果你的应用程序没有架构,很快就会陷入混乱。通常需要的功能包括一些关注点分离(MVC,MVVM),模板化,路由和模块管理。这就是
SproutCore和
Sencha出现的地方。它们提供了一个全面的解决方案来构建Web应用程序,其中小部件只是其中的一小部分。
似乎SproutCore和Sencha是赢家,因为它们是包含UI和业务逻辑并结构化你的应用程序的最完整的解决方案。尽管有诸多优点,但也存在一些缺点。有人说它们太重量级了或者需要遵守它们的开发模式,你可能不喜欢。例如,在Sencha中,你使用JavaScript描述GUI并使用Sencha的类型系统。这增加了一种沉重的感觉,即存在抽象和包装,而你真正喜欢HTML、CSS和原生JavaScript的简便性。
但这不是唯一的方法。Web 的力量在于有许多框架、库、工具大大小小,可以帮助您按照自己的喜好打造应用程序。例如,考虑AngularJS。它本身并不提供一组控件,但与 Twitter Bootstrap 结合使用,成为 RIA 的完整解决方案。或者,例如,看看EmberJS,它是由创建沉重的 SproutCore 框架的那个人开发的更轻量级的框架。它也没有为您提供一组小部件,但在我看来,它是一个非常好的应用程序基础。
所以,这是我的最终想法,而不是结论。所有这些框架通常都会展示它们的小部件集、漂亮的主题和其他视觉效果。但真正重要的是您将如何开发应用程序,如何组织它,以及您将在哪里实现您的逻辑。了解框架提供的内容,并思考您是否可以替换缺失的内容。