像Hibernate这样的框架会带来多少开销?

时间:2010-03-03 09:57:54

标签: java performance hibernate web-applications orm

开发人员有时会对多层企业Web应用程序进行严厉批评......“企业”被一些人视为缓慢,臃肿和资源匮乏的代名词。

与编写自己的DAO或其他抽象程度较低的方法相比,Hibernate等框架是否真的会对性能产生重大影响?通过非平凡我认为问题是“用户是否注意到页面加载速度较慢”。

4 个答案:

答案 0 :(得分:6)

正确使用后,您可能会提高性能而不是降低性能。在大多数情况下,您将获得可比较的性能,当出现问题时,您将有更多时间对其进行故障排除。

PS请记住使用适合Hibernate的工具,如Hibernate profiler。他们可以创造奇迹!

PPS使用Hibernate并不能代替您了解SQL!

答案 1 :(得分:1)

这实际上取决于您正在做什么,或者更确切地说取决于您如何使用框架。此外,凭借今天的硬件功能,今天的问题可能不会在几个月内发生。

不确定您是否提出这个要求,因为有一个应用程序要求表明性能很重要或者您只是想知道,但请考虑一下:有些人在应用程序中使用Hibernate,并注意到它是懒惰的。然后一些人重构它,优化它,使用普通的JDBC,iBatis或其他任何东西,它运行faaaaast。所以,结论是:Hibernate很慢。

但他们并未认为该技术被滥用。是的......你可以编写object.getX().getZ().getW().getSomeOtherThing().getEtc()并且它可以正常工作,这很酷,但Hibernate将生成SQL并且Heaven帮助你。

在做任何事情之前,请考虑优化规则:

  • 优化的第一条规则 - 不要这样做 它。
  • 优化的第二条规则(专家) - 不要这样做......但是。

添加框架通常是一件好事,因为它简化了开发。如果它增加了开销?嗯......你不能仅仅通过观察就知道。您必须对其进行分析并对其进行测试。

答案 2 :(得分:1)

  

我认为问题是“用户是否注意到页面加载速度较慢”。

对于大多数CRUD应用程序,实际上恰恰相反。正确使用和调优,Hibernate将生成比大多数开发人员更好的SQL(遗憾的是,但这是真的)和延迟加载,一级缓存(事务级缓存),二级缓存(全局级缓存),查询等功能缓存将使其比低级方法(自定义SQL和DAO)表现更好。

由于有人提到批量更新和大型结果集,我强调Hibernate对这些用例有StatelessSession。但我不认为它们属于webapp的交互部分范围(如果你的搜索在webapp中检索10条记录,那你就错了)。

答案 3 :(得分:0)

这很大程度上取决于你在做什么。一般来说,您的用户不会注意到前端的差异,但有几点需要注意:

  • ORM地图制作者不擅长批量更新或处理大型结果集。

  • 如果你有一组复杂的关系,你的ORM映射器可能会减慢速度,因为它确实以“错误”的方式加入。或者获取太多数据。

  • 如果您的网站负载过重,额外的CPU周期可能会受到阻碍,但不太可能。

ORM映射器可以使您的软件更容易开发。密切注意性能并在直接SQL中执行1%的操作,但将Hibernate保留在其他99%的内容中。