【问题标题】:considerations for choosing a web application approach?选择 Web 应用程序方法的注意事项?
【发布时间】:2009-12-20 10:07:33
【问题描述】:

我是一名长期的 Java Web 应用程序开发人员, 根据我的经验,构建 Web 应用程序有两种主要方法。

第一种方法是使用从客户端到服务器的技术,如 Struts、SpringMVC、JSF 等。

第二个是使用主要在客户端上运行的技术,如 Flex、Swing(web start)、JavaFX 等。

我知道这两种方法会长期存在,而且我知道它们各有优缺点。

我真的很想知道您喜欢什么时候使用它们? 选择一个而不是另一个时我应该考虑什么?

说出您想到的安全性、应用程序类型、无状态/有状态、数据库调用或其他任何内容。

看看有哪些不同的方面会很有趣。

【问题讨论】:

    标签: web-applications web-technologies


    【解决方案1】:

    基本上,区别在于“瘦”和“胖”客户端。

    两者的优缺点

    胖客户

    • 有机会向客户端推送更多处理逻辑,从而减轻服务器资源。这也可以带来更好的用户体验,因为 GUI 可以同时执行更新任务。
    • 客户端更容易离线运行
    • 可以更轻松地实现更丰富更复杂的 GUI 功能
    • 但是在不同的客户端类型(例如桌面和移动)之间重用逻辑可能更难
    • 但是可能更难编写代码,需要比通用客户端/服务器 Web 开发更多的专业技能,并且有时意味着更多的应用程序逻辑被编码到客户端中,从而导致关注点分离更少。
    • 但通常是专有的(例如 flex)
    • 但可能更难将数据暴露给网络爬虫

    瘦客户端

    • 可以将 GUI 开发交给一个单独的专家团队进行编码,而业务逻辑由另一个专家团队在服务器端进行编码(当然,这在很大程度上取决于所讨论的应用程序的类型以及逻辑的位置坐)
    • 更容易获得编码技能(对于客户端和服务器)
    • 促进跨不同 gui 类型或 API 在服务器端重用业务逻辑
    • 数据很容易暴露给网络爬虫
    • 但是 gui 可能通常以牺牲用户体验为代价来减少交互性
    • 但一般不能离线运行

    不过,Chrome 等功能更强大的浏览器的出现正在模糊两者之间的界限。

    一般来说,我假设默认始终是基于瘦 html 客户端的解决方案,在服务器上具有业务逻辑,除非另有要求(例如高级多媒体或处理需求或特定的 UI 外观设计选择,如动画)

    【讨论】:

    • 我同意。默认值应该很薄,但我建议在用户长时间与 UI 交互(通常不是网络应用程序的领域)、执行图形密集型操作(如照片编辑等)的情况下使用 fat,或者您需要 HTML/CSS/Javascript 不可能或不切实际的交互性。如果您发现自己走上了这条路,您应该问 1) 这是否必要,以及 2) 桌面应用程序而不是 Web 应用程序是否会更好地提供这种服务。
    • 同意。 Java Applets 和类似技术确实模糊了这一界限,它们具有桌面应用程序的大部分功能,但它们具有通过 Web 交付的便利性。
    【解决方案2】:

    我的建议是在所有情况下都避免使用插件。不要将 java、flash 或 silverlight 插件用于 Web 应用程序。你正在为未来的伤害世界做好准备。如果您想构建一个富客户端,请使用生成 javascript 的东西。如果您喜欢 Java,请使用 GWT。如果您不喜欢 Java,请查看 JavaScript 工具包,例如 ExtJS、Dojo、Sproutcore。

    我看待权衡的方式:

    瘦客户端(常规 HTML):

    • 优势:更容易适应各种浏览器和设备
    • 优势:更适合低带宽设备
    • 缺点:UI 控件不够丰富
    • 缺点:往返时间​​会扼杀“流量”。如果希望用户在您的应用中长时间工作,那么这种方法就不会奏效。

    富客户端(GWT 或 JS 工具包):

    • 优势:服务器端可以只实现一个干净的 API
    • 优点:UI 设计更容易实现,更丰富
    • 好处:您可以围绕缓慢的往返时间来规划您的设计(“离线”是缓慢往返时间的极端情况)
    • 缺点:移动设备和低功耗浏览器需要单独的前端
    • 缺点:低带宽会使加载速度变慢,用户就会走开

    对于我的应用程序,我完全属于富客户端阵营。但是我不会为“公共”互联网制作应用程序。

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多