作为长期的桌面开发人员,正在研究我们的第一个大型Web应用程序,进行Web开发的利弊是什么?
开发Web应用程序比开发桌面应用程序差吗?例如,这是更乏味还是烦人?上市时间会更糟吗?Web平台是否过度限制?如果对这些问题的回答都是肯定的,那为什么呢?
(与开发Flash或Silverlight应用程序相比如何?)
作为长期的桌面开发人员,正在研究我们的第一个大型Web应用程序,进行Web开发的利弊是什么?
开发Web应用程序比开发桌面应用程序差吗?例如,这是更乏味还是烦人?上市时间会更糟吗?Web平台是否过度限制?如果对这些问题的回答都是肯定的,那为什么呢?
(与开发Flash或Silverlight应用程序相比如何?)
Answers:
如果您不知道自己在做什么或没有正确地计划,这会很痛苦,但是对于任何开发来说都是如此。将应用程序瓶装在桌面应用程序中比较容易,但是随后您将失去为Web应用程序编码所提供的可访问性。
我会根据所需用途在桌面和网络之间进行选择。我看到许多基于Web的应用程序不应是因为它们不知道如何编写桌面应用程序代码。我看不到许多应该基于Web的桌面应用程序,我认为这是要考虑的事情。如果您需要集中存储,远程可访问性和UI特性,请确定。
我无法评论Flash或Silverlight,因为我都不使用。
:s/loose/lose/
:)
正如其他人所提到的,这是权衡和拥有正确知识的问题。
您可能要考虑的唯一陷阱是:您在问题中提到,您将Web视为具有“跨平台”优势。但是真的吗?可以这样考虑:如果为桌面开发某些东西,则需要定义平台列表及其支持需求。
毫无疑问,对于网络来说都是一样的。即使它已经比以前简单得多,但如果您设计一个广泛的公共应用程序,则必须处理每个Web浏览器的所有可能版本。而且,如果它更像是企业应用程序,请做好准备,并准备非常精确地起草支持的浏览器平台要求。
如果您构建了重要的东西,别以为您会在这里和那里避免针对特定平台的黑客攻击。
然后是有趣的部分。什么是最好的?像Chrome一样定期定期透明更新的浏览器?还是推出安全性的功能每个石器时代(例如IE)仅每月更新一次主要功能?答案并不像您想象的那么明显,因为其中一些频繁的“透明”更新可能会破坏您的代码,因此您将需要遵循并迅速做出反应。或者在开发和测试时关注beta和dev的预发布版本。对于所有的浏览器,您都愚蠢地说要支持(祝您好运)。
哦,我们不要忘记UI注意事项。您还面临决定的喜悦,你是否希望有一个一致的用户界面横跨所有目标平台,或一致的用户界面与每个主机的目标平台。看到所有可以在网页上查看的小按钮了吗?您是否希望它们在任何地方都完全相同,还是要与用户使用的环境集成在一起?当然,对于其他开发模型来说,这个问题并不是新问题,而是存在的,但它似乎在这里更重要,它取决于您所针对的用户类型以及他们的期望。公共最终用户倾向于希望您与他们的平台集成-但仍然希望您“哇!” 它们带有奇特的东西-而企业用户则需要类似于桌面应用程序的东西。移动平台为这一切带来了新的维度。
对于最后两段,通常的想法是有时将预配置的Web浏览器与安装程序打包在一起,然后将其连接到Web应用程序(本地托管或在Web上)。很棒是因为您可以控制更新频率,并且可以“冻结”状态,并且确切知道要支持和测试的内容。另外,您还可以添加一些很酷的内容,例如专用的用户扩展。例如,将“冻结的” Chromium与您开发的小型Chrome扩展程序包装在一起,可以使不同类型的用户更轻松地使用网络应用,这非常好。另一方面,如果您由于冻结发布周期而发生安全漏洞,则现在要负责,并且您的应用不会受益于速度提高(如果有)。
像很多东西一样,它是一把双刃斧。
注意:我对网络有强烈的偏见,因为它基本上是一大堆半成熟的技术(在这里我很有礼貌),直到OSI层,在这些层上,我们不断添加废话,隐藏了真正没有解决的问题或修复它们。
话虽这么说,我赞成网络作为平台的无处不在。我认为您公司的举动(可能)是正确的。显然,这取决于目标市场和目标平台。如果您想将某些东西作为服务公开,那么您可能会很高兴(尽管也没有必要)。如果您不这样做,那么可能没有太多原因。
嗯,现在,随着现有操作系统的轻量级变体不断涌现用于移动环境(上网本,智能手机,PDA,平板电脑,电子书等),并希望使用轻量级嵌入式浏览器,将来会出现有趣的发展。 ..但它们都有所有新的UI渲染故障。
关于基于插件的技术...我会说远离它们。它们将增强您应用的功能,但会限制其市场渗透率。在某些情况下,在跨平台支持方面,您会发现它是一个加号,直到新平台突然拒绝支持它们为止。Web Standard之所以在这里是有原因的(请注意,不要对HTMl5中的所有内容都太过兴奋,否则它可能会炸掉您的脸)。
编辑:其他要考虑的事情...
这是非常难找到懂行的Web开发人员。您可能会认为有很多人,但是他们却迷失在一大批无能的人之中,他们认为设法编写了700行JavaScript / ECMAScript以其形式实现一些验证是最终的选择以及所有可以通过高级技能实现的目标。
我不是在开玩笑,最近,所有网络开发访谈中的第一个问题是如何声明变量,然后使用之间是否有区别var
(取决于它们的回答方式)。令人沮丧。我发现找到普通或高级的Web开发人员要比找到普通或高级的桌面开发人员困难得多。
当您说“我是网络开发人员”时,没有人会认真考虑您。它是针对程序员,开发人员的子类的,不是吗?您会在远处忽略和嘲笑的人,去喝咖啡时不会加入。:)
这显然是不正确的,但是可以归结为您为主要由您管理的环境进行开发的事实。浏览器会修正您的错误标记,错误样式,甚至会更正其中一些错误脚本,并根据需要为您进行优化。而且,如果您是Web开发人员,人们不会以为您对底层编程有所了解,因此您必须是一个完整的白痴,对吗?
然后他们意识到ECMAScript有多么疯狂的复杂性,但是他们拒绝评论他们的观点。因为它是网络。我们本质上并不喜欢它,我们只是喜欢它使我们能够做的事情。
<canvas>
-...
作为处理这两种问题的人(虽然台式机比Web多):到目前为止,我最大的抱怨是Web开发中的“一般笨拙”感。即使使用最好的工具和框架,抽象仍然很漏水,并且您一直在处理基于无状态协议运行的事实。
另一个相关的烦恼是用于实现Web应用程序的技术的混合。没有任何一种可以使用的出色的整体式模块化环境和语言。即使是相对简单的Web应用程序,也需要您使用少数几种单独的编程,脚本和标记语言进行编码。
因此,一般的回答是:是的,确实很糟糕。至少如果您来自传统的桌面背景,并且习惯使用干净的,无缝的环境中的代码和定义明确的技术和平台对事物进行编码。最好的方法就是不要试图将其视为同一领域。如果您下意识地期望Web开发像桌面开发一样,那么它总是看起来很令人讨厌和烦人。
从桌面到网络的最大重新思考是:Web应用程序本质上是无状态的
弄清楚那部分,你就很好。
许多繁琐的工作来自使所有功能在所有浏览器中都能正常工作的工作。由于您很可能不需要处于最前沿,因此您可以通过选择合适的Web框架而不是手动编写自己的框架来利用他人所做的工作。
使用哪种语言,很大程度上取决于您当前所使用的语言环境。您可能需要编辑问题以提供该信息。
不,Web应用程序与桌面应用程序具有不同的权衡。每个人都有自己的长处。尽管有像单个部署这样的优势,但要知道您支持哪些浏览器以及您希望客户拥有什么样的屏幕分辨率,这是一个折衷方案。尽管您确实可以控制服务器硬件,但仍然存在一个问题,您希望获得多少流量,流量将如何扩展?对于那些已经从事Web开发多年的人来说,这可能是个痛处,就像我想像的那样,您有一些开发任务会给您带来极大的痛苦,不是吗?
我认为Flash应用程序可能是Web应用程序,也可能不是。诸如AIR之类的东西现在可以使某些Flash东西在桌面上运行,并且某些应用程序是在此之上构建的,例如Twhirl,因此并不是马上就可以干了。
Web开发并不一定会更糟,它只是非常不同。
将Web开发与桌面开发区分开来的一件事是,为了开发像样的复杂应用程序,您必须掌握多种根本不同的技术。我的意思是,您基本上需要具备以下方面的丰富知识:
然而,通过桌面开发,您通常使用的是一套更为单片的技术。例如,开发Java应用程序基本上需要您了解Java,仅此而已。(当然,这有点简化,但是重点是Web开发使您接触到范围更广的根本不同的技术,这些技术需要一起工作才能形成功能正常的应用程序。)
没有
只要选择正确的工具,Web开发就和桌面开发一样干净和容易。
Web API(html,CSS,Javascript和DOM)与win32 api等效。最终,所有东西都降到了该API级别,但是如果您直接在其顶部进行编程而又没有一个库来从您身上抽象出混乱,冗长和前后不一的地方,那么您将为之疯狂。
因此,请谨慎选择框架。选择不良的工具会引起某些问题(例如,浏览器兼容性问题)。
可以使用单一语言建立一个干净一致的Web开发平台。例如,如果您希望它一直都是“ java”,则可以使用GWT并用Java编写客户端代码和服务器端代码。或者,如果您希望全部使用Javascript,则可以选择Ext JS作为客户端,而node.js作为服务器。
我听说它被形容为“ ...我生存的祸根”,我同意。我已经花了一个小时来做HTML Web开发,但我拒绝了。太痛苦了。我花了很多时间在HTML上,最近开始使用“ Flash平台”。它是我见过的最复杂的框架之一,甚至没人知道。当人们提出Flash时,他们会想到10年前的Flash。增长了很多 我喜欢再次编写软件。
它仍然有它的缺点。Bug有时会永远存在,但会变得更好(感谢Steve J.)。
顺便说一句,Flex开发人员严重短缺。有很多公司找我,病了。如果您了解CS,请在接下来的6个月中学习Flex硬核,然后给我打电话。我将拒绝的所有工作机会都转嫁给我。
更新:跨浏览器支持是主要的痛点。在一种浏览器中有效的功能在另一种浏览器中无效,或者在以前的版本中无效。
流程如下:-获取网站设计-尝试在一个目标浏览器中重新创建网站(这可能很困难)-向客户展示-客户更改设计-抓取您最初所做的所有布局工作-使功能正常-客户批准-让它在其他浏览器中运行。这是最困难的部分。一路走来,有一些隐蔽的错误。然后,您将遇到早期浏览器不支持的功能,例如圆角。您将尝试重用您的代码和CSS,但是很快就会变得支离破碎。简而言之,它可以很快成为高维护成本。添加动画和较旧的浏览器会令人窒息。
客户将进行更改。您最终将把所有的时间都花在做“应该是简单的事情”上,并且讨厌您的生活。您将成为一名大师,并且知道您不想知道的事情。我知道这听起来很引人注目,但我不会修饰您将要面对的问题。框架将使其变得更容易。如果您坚持使用HTML,则要做好准备,请重新创建HTML中自己喜欢的网站之一,并确保在其支持的所有浏览器中匹配其设计和功能。上班之前,先解决遇到的问题。诸如最佳设计工具,最佳javascript框架,最佳调试工具,最佳IDE等问题。