2010-03-03 54 views
3

开发人员有时会对多层企业Web应用程序进行严格审查......有些人认为“企业”与缓慢,臃肿和资源匮乏相同。像Hibernate这样的框架会带来多少开销?

与编写自己的DAO或其他抽象较少的方法相比,像Hibernate这样的框架是否会对性能产生不小的影响?通过非平凡的我想问题是“用户注意页面加载速度慢”。

+0

滑冰接近这里的主观性的边缘;-)我会尝试重新措辞。 – 2010-03-03 14:46:55

+1

为什么它是主观的?欢迎大家讨论指标,或者额外的代码框架。 – 2010-03-03 14:50:41

+0

对......“ – rogerdpack 2016-12-29 18:49:24

回答

6

如果使用得当,您可能会提高性能而不是降低性能。在大多数情况下,您将获得相当的性能,当出现问题时,您将有更多时间排除故障。

PS请记住使用适当的工具与休眠像Hibernate profiler。他们可以创造奇迹!

PPS使用Hibernate不能替代您的SQL!

0

这取决于你在做什么。一般用户不会注意到在前端有差别,但也有几件事情需要注意:

  • ORM映射器是不是在做批量更新或处理大的结果集大。

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

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

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

1

这真的取决于你在做什么或者更确切地说你如何使用框架。另外,对于今天的硬件功能,今天的问题可能不会在几个月内计算在内。

不知道你是否问这是因为有一个应用程序需求说性能很重要,或者你只是想知道,但考虑一下:有些人在应用程序中使用Hibernate,并且发现它很流行。然后一些人重构它,优化它,使用普通的JDBC,iBatis或其他,并运行faaaaast。所以,结论是:Hibernate速度很慢。

但他们并不认为这项技术被滥用。是的,很酷,你可以写object.getX().getZ().getW().getSomeOtherThing().getEtc(),它可以工作,但是Hibernate会生成SQL,天堂可以帮助你。

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

  • 优化的第一条规则 - 不要做 它。
  • 优化的第二条规则(适用于专家) - 不要这样做。

添加一个框架通常是一件好事,因为它简化了开发。如果它增加开销?那么......你看不清楚它。你必须分析它并测试它。

+0

”的严厉批评“具有当今的硬件功能今天的问题可能不会在几个月内算出来”,这对于web应用来说是一个可怕的论点。你的用户基数可能比电脑变快得多。 – 2010-03-03 10:33:41

+0

“你不能仅仅通过查看它就知道你必须对它进行简档并测试它......”是的,这就是这个问题的重点,我想有人可能已经这样做了:) – 2010-03-03 10:34:21

+1

如果你的用户基数爆炸如果你使用Hibernate,一些其他的框架或者它是一个自定义的框架,它会影响吗?当你遇到性能问题时你做的第一件事就是扔掉更快的硬件。如果这没有帮助,你就开始考虑在软件中改变什么。如果我从MySQL切换到Postgres会有帮助吗?那么甲骨文呢?我是否应该开始剥离软件以从中获得最终的性能下降等等。因此,基本上你会转而重新设计这个东西(如果你从一开始就没有为此目的设计它 - 那是你正在试图做的事情? )。 – 2010-03-03 10:43:56

1

通过非平凡的我想问题是“用户注意页面加载速度慢”。

对于大多数CRUD应用程序,实际上是相反的。正确地使用和调整,Hibernate会比大多数开发人员产生更好的SQL(很抱歉地说,但是这是真的),并且像延迟加载,一级缓存(事务级缓存),二级缓存(全局级缓存),查询缓存将使其性能比低级方法(自定义SQL和DAO)更好。

因为有人提到了批量更新和大型结果集,我强调Hibernate对这些用例有StatelessSession。但我不认为它们处于Web应用程序的交互部分的范围内(如果您的搜索在Web应用程序中检索了10个记录,那么您做错了)。