【问题标题】:Comparison of JSP Scriptlet versus MVC with regards to performanceJSP Scriptlet 与 MVC 在性能方面的比较
【发布时间】:2010-11-18 15:43:13
【问题描述】:

我是从面试回来的,CTO(首席技术官)告诉我有一个系统(已经运行了 5 年多),他们仍然不喜欢纯粹出于性能考虑使用 MVC。我知道大多数 MVC 使用反射来调用方法(本质上很慢),但是许多 MVC(我知道 Struts 会这样做,我阅读了代码)缓存它调用的方法,所以我不必“找到”方法来一直调用。

目前,他们坚持使用 scriptlet(而且他们不使用 JSPTags)。我想知道,纯粹的 scriplets 是否有比 MVC 更好的性能?他们更喜欢无状态会话而不是有状态会话,以避免会话迁移、会话跟踪等。

如果 CTO 说的是真的,为什么仍然首选 MVC(我知道 MVC 存在的原因,但就性能而言)。

【问题讨论】:

  • 听起来不像是我想为之工作的公司。 使用某种形式的基于 MVC 的框架编写商业 Java Web 应用程序是愚蠢的。此外,scriptlet 会引发 XSS,应该禁止而不是鼓励。
  • 通过!我可能提前离开了面试。

标签: java model-view-controller jsp scriptlet


【解决方案1】:

反论点:

  • 几年来,反射不再那么慢了。
  • 硬件性能在过去几年里得到了惊人的提升。
  • MVC 最终导致更快的开发。更少浪费的时间 = 更多的 $$$ 节省。

我会通过这份工作的。

【讨论】:

    【解决方案2】:

    CTO 的逻辑很奇怪;我不认为他知道他在说什么(提示:通过工作!)如果他如此担心效率,为什么不用汇编语言重写整个 webapp?

    反对 scriptlet 的论据

    • 我不喜欢 scriptlet,因为它们很难维护。他们也容易受到虐待。最重要的是,他们将视图逻辑与业务逻辑混为一谈,或者至少,使其变得非常容易和诱人。

    • 可以明智地分离出您的关注点并使用提取数据的服务(从而促进重用)。但我经常看到开发人员编写 JSP 之类的 PHP 代码(即与标记混合的代码)。

    我并不是说你不能用 JSP 写出好的代码。只是它更难(我觉得 MVC 有更多的保护措施)而且(我觉得)JSP 更容易被滥用。

    MCV 的参数

    • 为了回答您的第二个问题,首选 MVC,因为它本质上促进关注点分离,并且不允许来自单独区域的逻辑渗入其他区域。

    • 视图层只关心渲染视图。您从控制器获取元数据,并使用视图显示数据。你不关心这里的业务逻辑(你不应该关心)。

    • 控制器就像一个交通警察,将您的请求重定向到正确的目的地。控制器通常最终会调用执行所有业务逻辑的服务。

    • 模型负责应用程序域的数据和行为。模型将响应有关其状态的请求(因此这是您发送到视图的元数据),并且还将响应告诉它更改状态的指令(来自控制器)。

    • 反射真的没那么慢。此外,如今的计算机速度非常快,并且具有大量内存。性能并不是什么大问题。

    • MVC 模式促进了不同关注点之间的清晰分离,使开发人员可以轻松编写干净、健壮且可维护的代码。

    【讨论】:

    • 考虑到我已经说过I know why MVC is there,您实际上就是这样做的……但分享知识还是件好事……
    • @The Elite Gentleman 哎呀,对不起,我走神了 :) 我试图说明为什么 MVC 比 scriptlet 更好。我以为这就是你想要的:)
    • 我只想进行性能比较。我强烈推荐MVC。我改写了我的问题标题以使一切清楚。不要编辑你的答案,它会帮助隔壁的人;)
    • @精英绅士陷阱。我确实在我的论点中提到了这一点。但我认为作为一个整体,解释 MVC 是什么也有助于使性能论点更有力(它指出了使用 scriptlet 的缺点)。
    【解决方案3】:

    其他答案完美描述了 MVC 优于 scriptlet 的优势,但遗漏了一点。

    与直接方法调用相比,反射引入了一些开销。当您使用反射频繁调用简单方法时,这很重要。但是与典型 Web 应用程序中的整体请求处理时间相比,单个反射调用引入的开销并不重要。因此,在这种特殊情况下,出于性能原因决定不使用反射听起来很奇怪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      相关资源
      最近更新 更多