开发人员有时会对多层企业Web应用程序进行严格审查......有些人认为“企业”与缓慢,臃肿和资源匮乏相同。像Hibernate这样的框架会带来多少开销?
与编写自己的DAO或其他抽象较少的方法相比,像Hibernate这样的框架是否会对性能产生不小的影响?通过非平凡的我想问题是“用户注意页面加载速度慢”。
开发人员有时会对多层企业Web应用程序进行严格审查......有些人认为“企业”与缓慢,臃肿和资源匮乏相同。像Hibernate这样的框架会带来多少开销?
与编写自己的DAO或其他抽象较少的方法相比,像Hibernate这样的框架是否会对性能产生不小的影响?通过非平凡的我想问题是“用户注意页面加载速度慢”。
如果使用得当,您可能会提高性能而不是降低性能。在大多数情况下,您将获得相当的性能,当出现问题时,您将有更多时间排除故障。
PS请记住使用适当的工具与休眠像Hibernate profiler。他们可以创造奇迹!
PPS使用Hibernate不能替代您的SQL!
这取决于你在做什么。一般用户不会注意到在前端有差别,但也有几件事情需要注意:
ORM映射器是不是在做批量更新或处理大的结果集大。
如果你有一组复杂的关系,ORM映射器可能会放慢速度,因为它会以“错误”的方式加入。或者获取太多数据。
如果您的网站负载非常重,额外的CPU周期可能会受阻,但不太可能。
ORM映射器可以使您的软件更容易开发。注意性能,并在直接SQL中执行1%的事情,但将Hibernate保留在其他99%的事情中。
这真的取决于你在做什么或者更确切地说你如何使用框架。另外,对于今天的硬件功能,今天的问题可能不会在几个月内计算在内。
不知道你是否问这是因为有一个应用程序需求说性能很重要,或者你只是想知道,但考虑一下:有些人在应用程序中使用Hibernate,并且发现它很流行。然后一些人重构它,优化它,使用普通的JDBC,iBatis或其他,并运行faaaaast。所以,结论是:Hibernate速度很慢。
但他们并不认为这项技术被滥用。是的,很酷,你可以写object.getX().getZ().getW().getSomeOtherThing().getEtc()
,它可以工作,但是Hibernate会生成SQL,天堂可以帮助你。
之前做任何事情,考虑优化的规则:
添加一个框架通常是一件好事,因为它简化了开发。如果它增加开销?那么......你看不清楚它。你必须分析它并测试它。
”的严厉批评“具有当今的硬件功能今天的问题可能不会在几个月内算出来”,这对于web应用来说是一个可怕的论点。你的用户基数可能比电脑变快得多。 – 2010-03-03 10:33:41
“你不能仅仅通过查看它就知道你必须对它进行简档并测试它......”是的,这就是这个问题的重点,我想有人可能已经这样做了:) – 2010-03-03 10:34:21
如果你的用户基数爆炸如果你使用Hibernate,一些其他的框架或者它是一个自定义的框架,它会影响吗?当你遇到性能问题时你做的第一件事就是扔掉更快的硬件。如果这没有帮助,你就开始考虑在软件中改变什么。如果我从MySQL切换到Postgres会有帮助吗?那么甲骨文呢?我是否应该开始剥离软件以从中获得最终的性能下降等等。因此,基本上你会转而重新设计这个东西(如果你从一开始就没有为此目的设计它 - 那是你正在试图做的事情? )。 – 2010-03-03 10:43:56
通过非平凡的我想问题是“用户注意页面加载速度慢”。
对于大多数CRUD应用程序,实际上是相反的。正确地使用和调整,Hibernate会比大多数开发人员产生更好的SQL(很抱歉地说,但是这是真的),并且像延迟加载,一级缓存(事务级缓存),二级缓存(全局级缓存),查询缓存将使其性能比低级方法(自定义SQL和DAO)更好。
因为有人提到了批量更新和大型结果集,我强调Hibernate对这些用例有StatelessSession
。但我不认为它们处于Web应用程序的交互部分的范围内(如果您的搜索在Web应用程序中检索了10个记录,那么您做错了)。
滑冰接近这里的主观性的边缘;-)我会尝试重新措辞。 – 2010-03-03 14:46:55
为什么它是主观的?欢迎大家讨论指标,或者额外的代码框架。 – 2010-03-03 14:50:41
对......“ – rogerdpack 2016-12-29 18:49:24