为什么内部企业应用程序普遍采用Web应用程序?

28
好的,我知道人们不喜欢在电脑上安装不必要的软件,这也是Web应用程序相对于本地运行的"桌面"应用程序的主要优势。

但是对于企业内部应用程序而言,如果安全性不是问题,如果一个应用程序的用户群体一直使用它作为他们的主要工具,那么桌面应用程序难道不是更好的选择吗?

我没有任何关于WPF Web应用程序的经验/了解,但我的印象是它本质上是在您的Windows PC上本地运行的应用程序。我更熟悉可能是旧技术的WinForms,特别是通过ClickOnce技术部署WinForm应用程序。

在实际操作中,点击Once(以及可能是WPF Web Apps)似乎已经解决了过去的dll hell部署问题,然而,在避免与本地安装相关的dll hell的吸引力方面,为什么公司仍然回避/害怕此类应用程序,并迅速转向Web应用程序呢?

在我看来,桌面应用程序的优点是:

1)成本 - 桌面应用程序在概念上更简单,因为您拥有本地机器的全部资源和状态。因此,对于相同的功能,桌面应用程序的开发成本一定更低。只需看看所有复杂的客户端/服务器端Ajax代码,您就知道这些东西在桌面应用程序中是多么轻而易举。我想有人会争辩这一点,但对我来说,这是显而易见且无法争议的。

2)桌面应用程序通常更加丰富。Web应用程序最多可以与更复杂/更昂贵的代码相媲美。(上述1的一个必然结果)

我可以列出更多,但这应该足够了......

显然,并非所有内部网站都适合桌面应用程序。但以这个为例,并告诉我你是否认为在Web上部署桌面应用程序是更好的选择:

用户每天使用8小时的帮助台应用程序,是他们PC上唯一运行的应用程序。此外,应用程序很少进行修补。

我的感觉是,人们会沉溺于一种思维误区,一旦他们知道某种事物(例如,Web应用程序),他们就把它视为万能解决方案。你怎么看?

编辑#1:这里是Click Once桌面应用程序的一个示例(用于管理问题票据的Rational Clearquest/Sharepoint/PVCS/Mercury集成前端),它利用客户端计算机的计算能力在本地存储信息,让用户以不同方式切片和分析数据而无需每次都访问服务器,同时仍然允许用户实时链接到实时数据以更新单个记录。这有点像电子表格下载,可保持与服务器数据的链接,以便用户想要执行更新。

当然你可以在网站上模拟这种功能,但我认为开发工作量会更大,并且你无法获得这种响应速度,这对于经常使用此应用程序的用户来说非常重要。


2
你做了很多假设,例如他们“很少”更新,并且同时运行不同版本的人没有任何成本。公司倾向于采取措施来降低风险,这甚至可能被视为他们的主要目的。打赌内部软件不需要修补程序是在冒险,而不是减少风险。 - Ken
4
我无法同意你关于“桌面应用更便宜”的说法。你是基于“复杂的花哨的Ajax”来做出这个断言的,但你忘记了所有其他会使成本增加的因素:需要安装到很多机器上才有用;必须占用更多的内存才能完成同样的工作(例如,一个10 MB的桌面应用程序乘以500个用户比一个300 MB的服务器应用程序占用更多的内存);还有一系列其他因素。此外,桌面应用的寿命要短得多,而Web应用程序往往更精简且在更广泛的系统范围内工作更好。 - John Feminella
2
我不理解你所提出的关于内存的论点。假设你的前提是所有桌面实例使用的内存总和大于相同数量用户连接到 Web 应用程序所使用的内存总和,我的回应是:“那又怎样?”——只要我们不影响 PC 的本地性能。 - Chad
1
关于假设很少发布的好处,这是不应该假设的。但正如其他地方提到的那样,即使频繁(每天一次)的补丁在高速内部网络中进行小的dll增量部署也不应该成为大问题。 - Chad
2
Web应用程序是平台无关的,可以轻松地在任何地方部署,甚至在移动设备上也可以。由于有很多Web技术工具集和框架,Web应用程序开发在成本方面并不昂贵。通常情况下,它更容易开发,因为方法通常更高级别。就企业应用而言,我个人怀疑桌面开发在速度或成本方面是否更快或更便宜。你只需要使用好的库和框架,而不是像桌面应用程序一样手写所有内容。或者你认识任何一个人会从头开始编写他的应用程序吗? :P - back2dos
显示剩余9条评论
11个回答

21

Web应用程序之所以广泛使用是由于以下原因:

  1. 很容易进行安全保护
  2. 创建了一个标准的参考点,任何人都可以访问:
  3. 不会锁定使用不同平台的人。
  4. 更容易从网络外部访问(将安全问题放在路由器/ VPN等设备上)
  5. 需要较少的技术支持(标准运行平台)
  6. 如果出现故障,更容易提供支持(您有一个关键响应团队可以修复它,而不是数千台随机宕机的机器)
  7. 数据的中央存储点(更容易备份和访问)
  8. 能够更好地扩展
  9. 比寻找/创建与不断变化的环境(LDAP、不同的数据库、不同的备份、同步)兼容的分布式组件集更容易构建或重用企业框架
  10. 受攻击者的影响较少(蠕虫、人为修改客户端等)
  11. 桌面客户端有时可能有硬编码环境,或者需要特定的工具集,这使得新用户设置起来很繁琐
  12. 处理服务器要比处理数千个客户端便宜。您可以设置系统以具备冗余性和快速故障转移。 是的,服务器设备成本更高,但从长远来看维护成本更低。

1
对于网络外的员工,如远程工作者、承包商、远程办公等,必须提供+1支持。这是非常重要的。 - AJ.
1
1-嗯,也许吧。2)点击一次和WPF Web应用程序也是如此(3)在所有用户都在Windows上的公司环境中,这不是问题(4)我们正在谈论内部应用程序与内部Web应用程序,无论哪种方式,您都需要VPN。对于其中一个而言并不更容易。5)是的,个别问题的机会更多,但比以前少得多。6)不确定从有限的空间开始,但不要购买它7)在两种情况下,数据都在服务器上8)我当然不相信这一点,因为我们可以更好地利用客户端机器。 - Chad
如果你能暂停时间,那么你在第三点上是正确的。供应商锁定是一个大问题,组织会变化。IBM 大力采用了 Linux。政府有更换供应商的习惯。1. 程序员不是安全专家。2. 您会像以前一样遇到版本问题。4. 无法总是保证客户端,必须对客户端应用程序进行特殊测试以适应网络情况。5. 当您从头开始创建时,会产生新的问题。8. 如果能处理空闲的处理资源,你的观点是正确的。 - monksy
1
移动应用程序并不容易保护。 - vy32
Web应用程序至少不比富客户端应用程序更难保护安全。 - Craig Tullis
显示剩余2条评论

16
为什么Web应用程序在内部企业应用程序中很流行?
主要是因为Web应用程序的集中化部署模型解决了旧的“fat client”应用程序(机器规格,可用库,驱动程序等)的部署问题。我见过一些公司,在完成部署时,最后一个安装的计算机已经比第一个版本要领先两个版本。有了客户端浏览器(即跨平台执行环境)和集中化部署,这些问题就可以轻松解决。欢迎来到“thin client”时代。
现在,我并不认为桌面应用程序通常更便宜(我不知道开发是否更便宜,但我确定维护、支持等并不便宜)。
但我同意桌面应用程序通常更加丰富多彩。无论人们声称什么,这在AJAX出现之前是无法辩驳的,而在某些特定领域,这种情况仍然适用,其中浏览器只是不合适的,无论是否使用AJAX(让交易员使用浏览器,你会明白的)。有些人不希望采用页面流模式,有些人需要高级小部件(例如带有高级过滤、分组、类似Excel的基本公式等功能的网格组件)、低延迟、实时等等,即一些富Internet应用程序-或RIA-不是真正面向的并且因此不是正确的选择!
我也同意像Java WebStart或Microsoft ClickOnce这样的技术解决了旧的部署问题,并允许开发所谓的Rich Desktop Applications-或RDA-(客户端上的丰富桌面UI,服务器上的业务,它们之间的标准协议和集中化部署,因此仍然是“thin client”),看起来是一个很好的折衷方案(更好的用户体验但不带头疼)。
那么为什么人们总是忽略RDA选项?嗯,我认为:
1. 我们(IT专业人士)已经教会人们如何创建互联网应用程序,因此他们只是重复做同样的事情。
  • 已经很复杂了,要解释互联网、瘦客户端、AJAX、RIA等技术,并且关于RDA的宣传很少,所以大多数人不知道RDA是什么。
  • 我们(IT专业人员)经常说出一些相反的话:不要使用臃肿的客户端,那很糟糕,用轻量级客户端,那更好;不要使用javascript,那很糟糕(在AJAX时代之前),用javascript吧,那更好(在AJAX时代之后);甚至都说不要使用轻量级客户端!那很糟糕,用富客户端应用程序吧,那更好。尽管这其中有合理性,但最终使得某些概念(如RDA)难以向非技术人员推广。
  • 人们不容易忘记不好的经历(如臃肿的客户端),即使自那以后事情已经改变了。
  • 实际上,在95%的情况下,人们并不真正需要RDA。
  • RIA开发人员比RDA开发人员更多。
  • 因此,这是我们(IT专业人员)的错 :)


    3
    非常棒的回复!我认为你比其他一些回复更好地抓住了我的意思,这些回复也提出了有效的观点。我的经验是,在开发Web应用程序时,它们几乎总是更加笨重,并需要更长时间逐个屏幕遍历才能执行与优秀的桌面应用程序相同的功能。如果你像我的Help Desk示例那样花费很多时间在应用程序中,你会希望一个让你快速高效完成工作的应用程序。想象一下,如果Vis Studio是一个Web应用程序,并且如果它是一个好的应用程序,写它所需的努力…… - Chad
    +1。然而,我不同意关于桌面应用程序的部分。如果你在计算机上投入足够的硬件(比开发人员或管理员更便宜),并且安装一个体面的浏览器,那么它将能够使用JavaScript执行企业桌面应用程序所能做的任何事情... 或者,您可以使用Silverlight、Flash或Air等其他工具...请查看成熟的Web图像处理应用程序Aviary Phoenix,或者Sliderocket,在协作方面甚至超过了桌面替代品... - back2dos
    @back2dos 这超出了我的能力和知识范围,但我仍然不太相信。1.与C#或Java相比,JavaScript是一种较差的语言。2.许多公司没有编写您展示的这种应用程序所需的技能(顺便说一下,这些应用程序很好)。3.我不确定Flash、Silverlight、Air是否友好地支持打印?不,真的,我仍然认为我们正在尝试使用浏览器来做它们没有被设计用于的事情(浏览器不是操作系统)。 - Pascal Thivent
    “浏览器不是操作系统”:目前来看非常正确。看看Chrome OS或ES OS。我同意JS和HTML/DOM并不是最好的技术。但基本概念是强大而清晰的(也有许多好的分支)。就GUI开发而言,这是最标准化的东西。但从Web开发人员的角度来看,操作系统就是浏览器,因为那是他们能接近的最近距离。这既是一种祝福,也是一种诅咒。但显然很多人选择与之共存。 - back2dos
    许多公司没有能力制作任何像样的软件...(强调在“任何”上)。确实如此。 - Craig Tullis
    显示剩余2条评论

    11

    我同意Web应用程序不是更快的开发方式--除非您需要支持多个操作系统或数据库连接,这基本上适用于我所做的一切。

    1. 20%的用户不使用Windows。
    2. 100%的用户希望能够在家中使用内部网络应用程序。
    3. 100%的用户希望无论从何处连接都能够查看其个人数据。
    4. 没有人喜欢听到“请稍等,我们正在将您升级到3.0.1版本”。

    文档创建程序(包括图形程序)明显更适合在桌面上使用,尽管Google Docs会让您产生不同的看法。您不想远程运行音频或视频编辑器。但是工作越不个人化——越具有协作性(企业),Web应用程序就越有意义。


    1
    1. 假设所有用户都在运行Windows操作系统。(2) 这不是问题,我可以在家里运行内部ClickOnce和Web应用程序。(3) 嗯?(4) 更好的方法是,由于今天的快速网络连接以及通过小块的dll修复来部署补丁,用户几乎不会注意到补丁的安装。如果我们每天发布一次,这将为我的用户增加5秒钟-他们在开始新的一天并在打开应用程序时喝咖啡的那5秒钟。
    - Chad
    回复:“但是工作越不个人化,越需要协作(企业级),Web应用程序就越有意义。” 我:我不明白为什么Web应用程序比桌面应用程序更适合协作。 - Chad
    即使我不喜欢谷歌文档,但这是一种可以随时随地访问我的正在进行的工作的方式,所以我还是会使用它。虽然我喜欢Thunderbird,但我不能在每台电脑上都安装它,最终只能使用一堆Webmail界面。我更喜欢一个基于Web的Thunderbird等效工具。 - egrunin
    这是一个实际的例子:假设我正在设计一份CD包装。我正在尝试与客户(位于费城)和写唱片内页的人(在旅途中)进行协作。现在,我必须创建PDF并通过电子邮件将它们发送给其他人以获取他们的反馈。如果他们可以打开某个版本的“InDesign Web”并立即查看我的更改,那将会好得多。(当然,他们可能已经有这样的东西了--我有点落后了。) - egrunin
    对我来说,大多数Web应用程序甚至没有“发布”。当有人报告错误时,我只需修复它。如果我准备好并测试了一个功能,我就会直接发布它。 - egrunin
    @ChadD 绝对没错。第三点与Web和本地开发完全无关。任何应用程序都可以访问远程数据。考虑一下:浏览器是一个桌面应用程序。每当用户请求您的URL时,它会下载最新版本的JavaScript库并编译/解释它们。这实际上是一种修补解决方案。没有理由认为这样一个好的、不显眼的解决方案必须仅限于Web浏览器。Web旨在通过HTTP下载文档,只是这样--我们从来没有打算做所有这些AJAX的废话,我真的希望我们将来能看到更少的这种情况。 - nmclean

    6
    • 更快的开发时间
    • 部署容易(您可能需要多次部署)
    • 一些企业IT团队不允许用户安装应用程序

    ****编辑****

    • 更容易保证应用程序与数据库的网络性能
    • 数据库更加安全
    • 更容易解释如何启动应用程序
    • 无需存储或安装额外的库(通常情况下)
    • 更易于维护(由开发人员和IT共同维护)

    8
    Web应用程序不一定更快地开发。我预期人们会说它们开发速度不会更慢 - 我根本不相信这一点 - 但对于两种方法的专家来说,它们肯定不比其他方法更快。 - Chad
    3
    回复:“@Steven: 它是无状态的有其价值”。当然,如果你是亚马逊公司,你不可能在服务器上跟踪状态。但如果客户端可以为你做到这一点,你就会拥有各种优势。 - Chad
    3
    我认为敏捷开发的网络应用程序可以比传统构建的应用程序更快、更准确地开发出来。我没有任何数据支持这一点,这只是我的经验。 - Joel Etherton
    1
    我不认为使用cookie或HTTP请求参数来识别用户是什么“黑客”手段。 - Kaleb Brasee
    1
    致:ux9i:即使在客户端执行了“Conn.Open”命令,我认为这并不意味着您没有使用连接池。即便如此,可以通过由客户端调用的 Web 服务来执行 db IOs。 - Chad
    显示剩余10条评论

    3
    1. 网络应用程序更容易更新。内部开发团队可以在用户甚至不注意到的情况下更新网站。
    2. 网络应用程序通常比“胖客户端”使用更少的带宽。如果您有多个办公室或一支在外工作的销售团队,则带宽非常重要。尝试使用(我能想到的最糟糕的情况)MS Access通过1mb线连接到远程数据库-它不起作用。

    3
    在我的经验中,主要是为了方便分发。我曾经参与过一个Win32应用程序的打包、分发物流和个人系统调试工作,需要将其交付给多个地点的数千人。这种体验无法用“头痛”来形容。
    之后,我为同一家公司创建了一个Web应用程序,也被数千人使用。一旦我们完成了应用程序的开发和测试,整个分发过程只包括1)部署到生产环境和2)向所有人发送URL链接。让每个人都能访问Web应用程序,而且支持问题的数量只是零头。

    1
    我认为您准确地抓住了Web应用程序的主要吸引力:部署简单。但是,Winform应用程序的Click Once部署对我来说非常好用,我想知道WPF Web应用程序是否更好地解决了部署问题。我认为Web应用程序的另一个主要优势是获取补丁。然而,随着今天快速的互联网连接和通过小块的dll修复部署补丁,用户几乎不会注意到补丁的安装。 - Chad
    ClickOnce还可以。但我们越来越多地生活在BYOD和多平台的世界中,这种趋势将继续加速。它不会放缓。跨平台运行的应用程序除了部署角度之外,还具有严重的优势。而且,富客户端的东西将继续变得更容易。 - Craig Tullis

    2

    大多数“企业级”应用程序并没有从本地运行中获得很多好处。它们通常不需要加速视频等功能,而是主要用于数据查看和输入。实际上,易于部署、集中管理等优点将超过任何本地桌面应用程序的好处。


    1
    我意识到你也可以在Web应用程序中实现所需的功能,但我的主要观点是,我认为这样做更加困难,因此开发Web应用程序的成本更高,并且曾经专属于Web应用程序的桌面替代品现在也可以集中管理,并且这些应用程序的部署非常容易。换句话说,Web应用程序不再保留对桌面应用程序的优势。显然,在这种情况下,Web应用程序已经变得更像桌面应用程序(更丰富),但复杂度和成本也增加了。 - Chad
    1
    我不认同开发网页应用比桌面应用更难 - 实际上这取决于你掌握了哪些技能。 - Jeremy Raymond

    1

    它还可以更轻松地扩展和提高应用程序的可靠性。将其放在备份服务器上(可能是集群中的一个),您可以为部署提供单一来源(@Gabriel),并且您不必担心系统维护方面的问题。您不必担心玛丽走廊里的电脑运行应用程序太慢。它还减少了对数据源的访问/安全要求。随着新的MVC,n-tier等网站开发,数据访问被分配给单个层,而不是每个人都有读取权限。


    1
    桌面应用程序的扩展性更好,因为您可以更好地利用客户端机器,而对于Web应用程序来说,客户端机器往往倾向于几乎是“哑终端”(夸张了一点)。如果玛丽的电脑运行该应用程序太慢,那肯定是因为该应用程序提供了比笨重的Web应用程序更丰富的体验。在桌面应用程序中,您仍然可以将数据访问层集中在服务器上。 - Chad
    我不同意。如果应用程序变化很快,每个变化都需要进行企业范围的部署,并且必须考虑使用应用程序的每个系统。对于 Web 应用程序来说,浏览器考虑因素和网络容量通常是唯一的缺点。 - Joel Etherton

    1
    让我们考虑你的回应: 1)成本 - 桌面应用程序在概念上更简单,因为您拥有本地计算机的全部资源和状态。因此,对于相同的功能,桌面应用程序的开发成本必须要便宜得多。只需看看所有复杂的客户端/服务器端Ajax代码,人们必须经历才能完成桌面应用程序中轻而易举的事情。我想人们会对这一点提出异议,但对我来说,这是显而易见的,无需争论。
    你没有考虑实施成本和维护成本。桌面应用程序需要在安装它的每台机器上进行维护。在大多数情况下,这需要在每个系统上进行配置。费用很快就会累加起来。
    对于Web应用程序,应用程序是浏览器。每台机器都可以轻松配置一个浏览器,维护成本较低。
    2)桌面应用程序通常更丰富。 Web应用程序在最好的情况下与之相当,但需要更复杂/更昂贵的开发代码。(与1的推论)
    我不能同意桌面应用程序通常更丰富的说法。通过新技术,Web应用程序可以包含丰富的用户界面和功能,而开发成本很低。

    1
    1. 我承认部署问题的潜在风险更大,但我认为这已经显著减少,并且没有得到充分认可。不良记忆难以消除。
    2. Web应用程序可以接近桌面应用程序的丰富程度,但同样需要付出复杂性和成本来实现相同的功能。 重点是,我认为新技术Web部署的桌面应用程序的部署支持成本被夸大了,而桌面应用程序的减少开发时间所带来的成本节约被低估或更有可能是未被认可的。
    - Chad

    1
    • 因为Web是一个通用平台,而客户端操作系统不是。
    • 因为开发和维护服务器端代码比同时开发和维护服务器端和客户端代码更容易。
    • 因为Web是稳定和基于标准的,而客户端操作系统是专有且不断发展的。
    • 因为Web将超越您当前的IT政策和公司结构。(当您与B公司合并时,5000名员工带着他们的Chromebook出现时,您的Windows智能应用程序将不再显得那么聪明)。
    • 因为99%的企业应用程序都是CRUD应用程序。如果需要客户端数据操作,则转储到Excel。
    • 因为找到Windows客户端开发人员祝你好运。资金、行动和人才都在Web和移动领域。

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