HTML5 UI框架

54

我发现有许多HTML5 UI框架,例如:

我对这么多资源感到有些不知所措。 看了一些,但几乎所有的都显得太慢和过于臃肿。

我开始对该学习哪个框架感到有些困惑。 它们每个网站都宣传自己的产品是市场上最好的(明显的营销策略)。

作为一个Web应用程序开发和客户端JS UI框架的初学者,基于您们的经验,您推荐哪个框架对于快速开发桌面Web应用程序考虑到速度、小部件集合、复杂性、外观和支持等方面最好呢?

您推荐我开始学习哪一个呢?

我知道可能会有很多答案,每个人可能喜欢不同的框架,但这可以帮助我在一定程度上指导一下,并对一些最流行的框架进行一些批评。

2个回答

131
您的问题涉及内容太多,答案不会简单且不会明确。它也会非常主观化。从您提供的框架列表中看到,有些东西是很难相互比较的。我将尝试对它们进行分类并添加更多框架到列表中。
这里的主要问题不是特定框架的优缺点。主要问题是:您需要多少?您真的需要像 Gmail 或 Grooveshark 那样的应用程序吗?还是您需要像 Stackoverflow 这样的动态而不简单但仍然是网站。让我们考虑所有这些选项。
也许,您只想使用一些小部件来增强您的网站,例如标签页、对话框、一些可拖放元素、文本编辑等,并且您不希望改变您的开发模式。我的意思是,您使用您最喜欢的 Java/PHP/Ruby 并且不希望在 JavaScript 中编写大量应用程序的逻辑和行为。在这种情况下,基于 jQuery 的插件解决方案将适合您,特别是 jQuery UIjQuery 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集成。或者您可以使用更完整的框架,如KendoWijmojqWidgets。这些框架依赖于jQuery(Wijmo依赖于jQuery UI),并提供了其他的数据操作方式。它们都有数据模型。Kendo实现了自己的解决方案(我想是这样的),而Wijmo和jqWidgets则与流行的Knockout JS集成。
因此,Kendo和Wijmo属于同时提供小部件/控件和一些支持模型的框架组。还有其他类似的框架,不基于jQuery,例如Dojo Toolkit。添加一些动态数据加载,您将获得一个稍微复杂的Web应用程序。您还能希望什么呢?
实际上,最重要的事情被忘记了——你如何构建(组织)你的应用程序?如果你试图构建一个与服务器以RESTful方式通信的单页应用程序,那么如果你的应用程序没有架构,很快就会陷入混乱。通常需要的功能包括一些关注点分离(MVC,MVVM),模板化,路由和模块管理。这就是SproutCoreSencha出现的地方。它们提供了一个全面的解决方案来构建Web应用程序,其中小部件只是其中的一小部分。
似乎SproutCore和Sencha是赢家,因为它们是包含UI和业务逻辑并结构化你的应用程序的最完整的解决方案。尽管有诸多优点,但也存在一些缺点。有人说它们太重量级了或者需要遵守它们的开发模式,你可能不喜欢。例如,在Sencha中,你使用JavaScript描述GUI并使用Sencha的类型系统。这增加了一种沉重的感觉,即存在抽象和包装,而你真正喜欢HTML、CSS和原生JavaScript的简便性。

但这不是唯一的方法。Web 的力量在于有许多框架、库、工具大大小小,可以帮助您按照自己的喜好打造应用程序。例如,考虑AngularJS。它本身并不提供一组控件,但与 Twitter Bootstrap 结合使用,成为 RIA 的完整解决方案。或者,例如,看看EmberJS,它是由创建沉重的 SproutCore 框架的那个人开发的更轻量级的框架。它也没有为您提供一组小部件,但在我看来,它是一个非常好的应用程序基础。

所以,这是我的最终想法,而不是结论。所有这些框架通常都会展示它们的小部件集、漂亮的主题和其他视觉效果。但真正重要的是您将如何开发应用程序,如何组织它,以及您将在哪里实现您的逻辑。了解框架提供的内容,并思考您是否可以替换缺失的内容。


4
虽然我的问题不够精确,但这是一个很好的答案,它消除了我大部分的“困惑”。确实,有很多JS库和框架,对于刚开始接触这个领域的人来说可能会感到有些困惑,就像我一样。关于架构,我正在使用Node.js,并遵循其Express.js Web框架。我期待开发单页面交互式应用程序,我会查看你提到的那些 :) 非常感谢! - jviotti

4
Infeligo的答案非常出色。我的经验可能会引起一些人的兴趣。我使用Ruby on Rails作为服务器平台,其中大部分业务逻辑都驻留在上面。
在前端,我使用dHTMLX,这是一个JS库,其中最强大的是它们的网格对象。我的大多数应用程序都有业务/会计信息处理/显示要求,网格对象是我的主要支柱。然而,它们的对象集很全面,包括创建单个应用程序内的其他“窗口”,以向最终用户提供MDI类型界面的能力。我通常有一个登录表单,当成功应用时,打开一个带有顶部菜单的单个HTML页面。根据菜单中的选择,打开和关闭新窗口以显示/操作信息。这些窗口在单个HTML页面的范围内。
所有对象都有非常好的事件与其相关联,我在前端使用这些事件进行相当多的验证。但是,我通常还会在Rails模型中复制所有数据验证。这是额外的工作,但我只是更加谨慎。还有许多抽象对象,可以帮助连接前端可视对象(例如网格)和后端服务器之间的数据。大多数数据连接可以使用XML或JSON完成。我使用XML而不是JSON,仅因为我对该结构的经验以及Rails提供了一个不错的XML构建器。因此,在我的情况下,我很少使用任何基于Rails的视图,因为所有的可视对象都来自dHTMLX。
我喜欢dHTMLX的另一件事是它们的对象速度。例如,网格对象可以轻松处理10,000多行,并且速度非常快。
套件的一个巨大缺点是文档。该公司是东欧开发商,因此往往很难理解他们的文档确切含义。此外,他们的文档倾向于不完全记录所有内容,因此在试错式学习中浪费了很多时间。
希望这有所帮助。

3
谢谢提及DHTMLX库。我们一直在改进文档,将尝试使其更易读。如果您在文档中找不到所需内容,可以随时在论坛(http://forum.dhtmlx.com/)上寻求帮助,该论坛由dhtmlx的技术团队监控。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接