JavaScript/CSS vs. Silverlight vs. Flex

6
我们目前有一个非常复杂的业务应用程序,其中包含大量JavaScript代码,以使用户界面和交互感觉尽可能接近传统桌面应用程序(因为这是我们用户想要的)。多年来,这些JavaScript代码不断增长,使其难以管理和维护,并使添加新功能更有可能破坏某些现有功能。不用说,很多代码也已经过时了。
因此,我们正在讨论应该使用Flex或Silverlight重新编写应用程序的客户端部分,还是使用像jQuery这样的最新JavaScript框架重新编写客户端部分,或者我们是否应该继续使用现有代码并逐渐尝试替换最糟糕的部分。让这个决定变得更加困难的是,重新编写UI可能会花费我们6-12人月的时间。
我想听听你对这个问题的想法(也许你们中的一些人已经不得不做出类似的决定)。
编辑:回答一些答案中出现的问题:后端代码是用C#编写的,目标受众是我们销售软件给的公司的(通常是)非技术用户(不是普通公众,但也不是严格的内部用户),软件“仅”需要在桌面浏览器上运行,但不一定在移动设备上运行,客户端应用程序是一个完整的UI。

当前的代码是否使用了任何Javascript框架? - cletus
由于代码比较老,我们已经开发了自己的框架(有点儿;-)),但我们不使用任何标准的JS框架。 - ISW
根据下面的额外信息扩展答案。 - cletus
8个回答

15
说实话,我会重构旧的JavaScript代码,而不是重写这个应用程序。既然你在询问要把它放在哪个平台上,我猜你的团队对其中任何一个都不是专家(并不是打击团队,只是在做决定时必须考虑到这一简单事实)。这会对你不利,因为你将需要双倍的工作量来重写并学习如何在新平台上操作。
通过保持JavaScript不变,如果你愿意,可以慢慢引入框架,并迭代地进行(替换代码部分,测试它,发布它,并修复任何错误)。这将允许你以较慢的速度进行,并逐步获得反馈。这样,即使项目在中途取消,你也不会浪费所有的工作,因为最终用户仍在使用更新后的代码。记住瀑布模型,这基本上是完全更换的工作几乎永远不成功。
尽管我很不愿意承认这一点,因为这总是开发人员最喜欢的,但切换平台和一次性替换整个系统很少奏效。有无数的例子,其中之一就是Netscape。这里是Spolsky的文章。(我还推荐一本书《Dreaming in Code》。它是一个软件项目失败以及其如何以及为什么失败的绝佳案例)。记住,重写系统需要逐行检查代码,并找出它所做的事情以及原因。起初你可能认为可以跳过它,但最终结果就是这样。就像你说的,你的代码很旧,这意味着其中很可能有一些黑科技来完成某些任务。你可以忽略其中的一些问题,而其他的问题则会变成“我不知道系统需要它去做那个”。

1
而且,转移到像Silverlight或Flex这样的丰富客户端技术可能需要比用标准框架替换手工编写的JS框架更多的应用程序更改。在Flex/Sliverlight等中复制您的HTML应用程序的样式可能会很困难。 - Mike Sickler

5

这个决定通常与技术关系较小,更多地取决于你的技能和舒适区。

如果你有一些非常熟悉Javascript,但对.net或Flash/Flex一无所知的人,那么坚持使用Javascript并依靠像jQuery或Prototype这样的库是没有问题的。

如果你具备其他技能,那么使用Silverlight或Flex可能会更快地得到结果,因为它们都提供了相当多的“免费”功能。


5
这些是我所能想到的:
  • 由于你具有 .Net 后端并且有一定的能力将客户强制转移到特定平台,Silverlight 是一个选项;
  • 由于你的客户端是一个完整的 UI,你需要小部件和可能的其他功能,比如拖放;
  • 我没有看到任何要求让我觉得有必要从 Flex/Silverlight 开始重新构建(这通常不起作用),例如流媒体视频、SVG 支持。鉴于你团队熟悉 Javascript,我认为你不能提出什么令人信服的理由来使用除 Javascript 以外的任何语言。

但当然,JavaScript 具有许多特性和框架1。最重要的区别在于你的意图是“装饰”一组网页还是需要一个全套小部件来创建类似桌面应用程序的 Web 应用程序。你的问题表明这是后者。

因此——我可能会因此而受到贬低——我认为 jQuery 不是答案,我这样说是因为我喜欢 jQuery。jQuery(imho)非常适合增强网页和抽象跨浏览器低级功能,但对于复杂 UI 开发人员来说,最重要的因素是:

重点在于小部件。

我知道jQuery UI,但是在小部件方面它比其他框架要少得多。建议您查看一些框架的示例和小部件库:

其他框架(jQuery、Dojo、Mootools、Prototype)更加“紧凑”,可以说不太适合您的目的。

在做出决策时,请考虑每个框架的许可证。

关于上述三个框架,我的想法是:

  • ExtJS曾经以LGPL协议开源,但在2.1版本中进行了有争议的许可证更改(该帖子长达76页!),变成了GPL / 商业许可证。这个问题是社区不再积极参与框架的开发,至少不是主流版本。这意味着它现在由一个小团队(可能只有一个人)开发和支持,而不是由社区。在我看来,为此支付商业许可证不值得,而GPL在你的情况下可能是禁止的;
  • YUI由Yahoo支持,并提供更加自由且不那么侵入式的BSD许可证。它已经成熟、广泛使用,值得认真考虑;以及
  • SmartClient给我留下了深刻的印象。它可能拥有所有控件中最自由的许可证(LGPL),已经存在七年之久,并提供了令人难以置信的卓越控件。请查看他们的功能浏览器。

你的决定应该基于如何尽可能地免费获取应用程序的大部分内容。你不想浪费宝贵的开发人员时间去做以下事情:

  • 编写UI小部件,例如树形菜单和手风琴菜单;
  • 测试和修复跨浏览器的Javascript和CSS问题;
  • 创建自制框架,以大大复制现有框架所做并做得很好的工作。

我认为你应该认真考虑以上三个方向中的一个作为你未来的发展方向。


好的,我已经编辑了我的问题以回答那些细节。 - ISW
1
吹毛求疵:BSD许可证比LGPL更加宽松。 - Javier

4
我的看法很简单:除非应用程序需要公开访问,除非它需要进行搜索引擎优化和可查找性,并且/或者有其他强制性原因使其必须保持严格的文本基础,否则 Flash 或 Silverlight 等富客户端运行时就已经占据了优势。其中最大的原因是它们消除了为多个浏览器和平台开发的复杂性。再次强调:它们消除了运行时环境变量。不再需要调试旧版本的 Netscape 和 IE,不再需要对象检测和随后的分支,不再需要古怪的 CSS hack - 只需一个代码库,一切都搞定了。将运行时环境转移到 Adobe 或 Microsoft 将节省您时间、金钱和头痛,其他一切都相等。(当然,有 YUI、JQuery 等工具,但它们并没有消除这个变量,只是将其抽象化。而且它们也没有完全抽象化所有内容-只是部分内容; 最终,你仍然需要测试、调试、重新测试、调试、重复。)
当然,您的情况更加复杂,因为存在现有代码库问题,很难明确地说您应该走哪条路,因为只有您拥有代码,而我们只是有意见的极客。但是,假设仅通过您提出问题,重构现有代码库将涉及足够大的工作量,以至于首先考虑其他(可能相对陌生的)技术是有必要的,那么我的回答是,在做决定之前,你应该认真地看一下它们两个。
就我而言,我是一个长期从事服务器端工作的人,过去几年使用 ASP.NET/C#,并且在我的时间中编写了许多基于文本的业务应用程序,最近几年特别注重使用 JavaScript 提供丰富的 UI。我也花了最近几年的时间几乎专门使用 Flex。我在这两个世界中都有经验。我可以毫不犹豫地告诉你,现在是每个人都要超越 Flex 的工作:它只是一个非常多才多艺、高效的产品,对于业务应用程序来说,它仍然远远领先于 Silverlight。我无法推荐它高度;数据绑定和事件处理功能单独来说就是令人难以置信的节省时间的工具,更不用说您将拥有完全自由的布局、动画等。列表还很长。
所以,我的建议是:仔细看看 Flex。最终,您可能会发现从头开始重写只是一个太大的任务,无法证明其合理性,这很好-只有您可以做出这个决定。 (公平地说,您与 JavaScript 项目一样会搞砸 Flex 项目-我知道。我已经这样做过。)但总的来说,Flex 可能是目前最不受限制、最灵活、最功能丰富和高效的选择,因此值得考虑。祝你好运!

“不再调试旧版本的Netscape和IE”:如果某个东西是用js-css开发的,它并不需要在所有浏览器上都能工作。只需要选择一个浏览器(Chrome、FireFox或最新的IE)并为所有内部系统使用它即可。如果不受支持所有浏览器的要求和使用沉重的框架来弥补这种不必要的负担,那么js-css是一个很好的开发平台。 - alpav

2

你可能已经开发了很多年的 JavaScript 代码,但它可能与今天的可能性毫不相似。你无疑拥有许多有用的代码。因此,我的建议是使用 jQuery 重新编写 JavaScript 代码,并利用可用的 GUI 插件之一,也许可以看看 Yahoo 的东西。这样做可以使你的代码更加通俗易懂,并且能够覆盖最广泛的受众。


1
我们使用EXTJS与C#以及一些服务器端的C++开发了一个非常丰富的应用程序。我们不仅有客户对他们桌面浏览器中的界面感到满意,而且只需很少的Javascript调整就能提供Web浏览器支持。此外,我们还有第三世界国家的客户,由于他们的现场人员在互联网咖啡馆使用信息亭(其中许多没有安装Flash - 更别提Silverlight了!),因此无法使用Flash或Silverlight应用程序。我认为这些问题和其他问题弥补了在JavaScript中编写复杂应用程序的困难...

1

GUI技术首先应该根据你的目标受众来确定。例如,如果你的目标是iPhone用户,我不建议使用Flex,因为iPhone目前没有Flash播放器。

请记住,如果你转向像Silverlight这样的完整GUI工具包,你的用户可能会觉得界面不自然,因为在客户端框架中,通常的请求-响应循环并不那么明显。

之后,应该听取开发人员的意见。每个工具包都需要维护,如果你切换到一个全新的工具包,开发人员将不得不熟悉新的工具包,这可能是一笔昂贵的费用。

我的建议是你坚持使用JavaScript,因为你的开发人员对它很熟悉,并逐渐用像Prototype、jQuery或其他任何新工具包替换旧的JavaScript。使用先进的工具包,你可能会更快地重新做一些旧的东西。记住,你可以用任何工具包构建出漂亮的应用程序。



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