我们会建议使用哪种框架来制作类似于桌面的网络应用程序?
最近出现了一些用于编写基于Web的桌面式应用程序的框架。例如。 SproutCore和卡布奇诺咖啡。我们有使用它们的经验吗?感想是什么?我是否错过了其他框架?
我已经在StackOverflow上看到了相关问题,但是它们会生成大多数标准答案,例如"使用jQuery或者MochiKit或者MooTools或者Dojo或者YUI"。尽管有些人给出了非标准的答案,但他们似乎对使用此框架的经验很少。
任何人都可以分享为浏览器开发类似destop的应用程序的真实经验吗?
解决方案
我没有SproutCore或者Capuccino的经验。但是已经尝试在Django之上使用Dojo进行此类工作。只能告诉你它很慢而且有故障。
以我的观点,卡布奇诺咖啡就是不做什么的一个例子。他们在JavaScript之上实现了另一种语言,在浏览器开发人员已经在与之抗争的同时,这已经带来了缓慢性,更糟糕的是,他们根本不依赖于浏览器小部件,从而破坏了所有的用户导航体验。例如,他们实现了自己的滚动条,主要缺点是无法使用鼠标滚轮!
我真的更喜欢ExtJS的方法,该方法可以为我们提供丰富的小部件,同时保持UI与浏览器尽可能接近。
我也作为小发明推荐EXT JS。他们的许可证已更改,可能无法全部使用,但是如果我们要进行台式机之类的工作,这仍然是一个不错的选择。
这是他们在桌面环境下的示例页面:http://extjs.com/deploy/dev/examples/desktop/desktop.html
由于速度问题,这些高级框架会导致许多较大的应用程序(例如:非平凡的应用程序),因此我们仅使用普通的jQuery。在我们的测试中,在有许多可拖动对象或者许多放置目标的情况下,以及在屏幕上显示长列表(> 1000个条目)的情况下,所有高级框架都崩溃了。
部分原因是IE6和IE7的问题(在DOM树达到一定复杂度之后,性能突然开始急剧下降),但部分原因是这些框架产生的开销。
因此,我不推荐任何高级框架。我的建议是使用jQuery并直接使用DOM。
一些提高性能的技巧:
- 尽可能在服务器上呈现HTML。
- 保持HTML尽可能简单。
- 避免在DOM树中包含许多元素。
- 避免使用递归表结构(IE在相对较少的嵌套级别后突然停止显示它们)。
- 从DOM树中删除不可见的元素。
- 在更改它们之前,请从DOM树中删除它们,然后重新插入它们,而不是在它们位于树中时对其进行更改。
苹果公司证明了萌芽核确实有效,尽管很难估计它的表现如何。目前,我使用自己开发的库构建Web应用程序,复制了Windows软件套件中的一组功能(但已适应Web界面)。到现在为止,我一直避免使用框架,尤其是因为我不想膨胀。这种方法的问题在于,我浪费了过多的时间来复制框架中已经存在的功能,并且我认为随着时间的流逝,我将逐渐接近类似于这些框架的事物。
因此,我一直在尝试在extjs中实现Web应用程序,这是一个令人惊讶的不错的体验。性能非常好,并且易于开发性很高,因为它们的组件集非常适合实际构建应用程序,而不仅仅是花哨的演示(Web工具箱中的常见问题)。如果我们有兴趣构建类似桌面的Web应用程序,我绝对会推荐它。
显然,扩大规模的问题仍然存在,但老实说,我觉得最好在规模不那么重要的情况下使用工具包,而仅在需要时才使用基本的javascript(过早的优化是所有人的根本。邪恶的)。 Extjs可以放在原型或者jquery之上,因此这种方法绝对可行。在DOM中避免过多的内容通常是按需加载和卸载的一种方法。例如,extjs网格类有一个第三方扩展,通过巧妙地加载和卸载数据,可以滚动浏览一百万行数据集。
如果我们要使用Java,则可以考虑使用GWT-Ext(在下面使用Ext)可能是一个非常干净的解决方案。
我喜欢qooxdoo,尽管它采用JS的OOP方法而不是原型,但它是一个可靠的框架,并具有许多功能。
extjs可能会有所帮助。 http://dev.extjs.com/deploy/dev/examples/