论坛首页 Java企业应用论坛

struts2的性能为什么这么差,有性能测试截图

浏览 55221 次
精华帖 (2) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (12)
作者 正文
   发表时间:2010-06-01  
性能差很多,但是有很多可以优化的地方,ognl要合理利用哦
0 请登录后投票
   发表时间:2010-06-01  
hypercube1024 写道
downpour 写道
所以结论就是楼主应该放弃使用Struts2,投入SpringMVC的怀抱。

不过我对这个测试挺有兴趣,到达了什么样的标准,可以被楼主定义为“这么差”?


插件确实会影响性能,光使用 struts2-core vs struts2 + spring 性能好上2-3倍。但是和 springMVC 比 差 2-3倍。

最后再准备测试一下 Servlet 的结果,如果 Servlet 性能比 springMVC 好2倍以上的话,就直接用 Servlet 了,对性能要求比较高


这么说我就完全理解了。说白了就是说,你的系统对响应的要求很高。那最好就是什么都不要用,直接使用原生的Servlet。

Struts2的还有一个问题是耗内存。你可以做做这方面的测试,造福一下大家。
0 请登录后投票
   发表时间:2010-06-01  
企业应用 用struts2没撒 问题啊 我们的几个项目用也还好。
0 请登录后投票
   发表时间:2010-06-02  
struts2看起来的确很优雅,struts2我想我就用他来做控制层跳转使用,真想不出来还能用他干什么了,毕竟现在很多都是框架的整合集成之类的,所以struts2应该考虑到这个问题了吧~如果struts2没考虑到与其他框架的整合,我想这是他的一个失败的地方~
个人愚见,struts2思想不错,但是性能有待提高~
说道性能,我想这个应该是一个潜伏的炸 弹吧,不爆 炸一点事没有,如果一旦爆 炸,我们是不是应该考虑脱离掉struts2改用其他的呢?~
这个分析的帖子不错,继续关注,我一直没上struts2的框架,我觉得struts2的那些华丽的功能,不至于让我舍弃现在的框架来更换他,除非有一天,strusts2性能,功能上超过了我现在使用的框架,我可能会考虑替换~
0 请登录后投票
   发表时间:2010-06-02  
楼主有时间顺便也做下play!和spring3mvc的性能测试对比吧,play也是一个支持REST的web框架
0 请登录后投票
   发表时间:2010-06-02  
MrLee23 写道
struts2看起来的确很优雅,struts2我想我就用他来做控制层跳转使用,真想不出来还能用他干什么了,毕竟现在很多都是框架的整合集成之类的,所以struts2应该考虑到这个问题了吧~如果struts2没考虑到与其他框架的整合,我想这是他的一个失败的地方~
个人愚见,struts2思想不错,但是性能有待提高~
说道性能,我想这个应该是一个潜伏的炸 弹吧,不爆 炸一点事没有,如果一旦爆 炸,我们是不是应该考虑脱离掉struts2改用其他的呢?~
这个分析的帖子不错,继续关注,我一直没上struts2的框架,我觉得struts2的那些华丽的功能,不至于让我舍弃现在的框架来更换他,除非有一天,strusts2性能,功能上超过了我现在使用的框架,我可能会考虑替换~


struts2用来做控制层跳转?这是它最弱的功能了。

要说到和其他框架的整合,struts2才是web层框架中最强的,你见过有哪个web层框架现在整合其他框架用的是plugin形式?只要一个jar包就完全搞定了。这还能叫失败?那么我看不到成功的东西了。

struts2的核心是xwork,因为用到了ThreadLocal模式,所以那些Web容器中的对象会跟着当前Thread一跟到底,所以造成了struts2是很占用内存的,尤其是高并发的情况下,如果request的生命周期很长,你会看到内存不断上升。这个是struts2在性能上的一个问题,但是这个却能支撑起其他web框架无法支持的功能。

至于struts2的响应速度为什么不如springmvc或者其他的一些mvc框架来的快,这个也和自身的设计有关。struts2为每个响应都创建一个Action,并保证这个Action是线程安全的对象。但是其他的mvc框架,却还是基于servlet模式的,无法做到线程安全。所以我估计struts2在创建Action以及Action的执行环境中花费了比较多的时间,但是这个并没有什么数据上的支持,如果有时间,我倒是愿意来做一个测试,比较一下struts2和springmvc在响应一个web请求时,各个处理类之间的执行时间的比较。

像楼主这样子贴图,其实没有意义。因为你无法证明你的测试是标准的。而且,响应速度慢,需要分析其本质原因,而不是一概报怨,否则任何框架都会变得失去它的意义。
0 请登录后投票
   发表时间:2010-06-02   最后修改:2010-06-02
downpour 写道
MrLee23 写道
struts2看起来的确很优雅,struts2我想我就用他来做控制层跳转使用,真想不出来还能用他干什么了,毕竟现在很多都是框架的整合集成之类的,所以struts2应该考虑到这个问题了吧~如果struts2没考虑到与其他框架的整合,我想这是他的一个失败的地方~
个人愚见,struts2思想不错,但是性能有待提高~
说道性能,我想这个应该是一个潜伏的炸 弹吧,不爆 炸一点事没有,如果一旦爆 炸,我们是不是应该考虑脱离掉struts2改用其他的呢?~
这个分析的帖子不错,继续关注,我一直没上struts2的框架,我觉得struts2的那些华丽的功能,不至于让我舍弃现在的框架来更换他,除非有一天,strusts2性能,功能上超过了我现在使用的框架,我可能会考虑替换~


struts2用来做控制层跳转?这是它最弱的功能了。

要说到和其他框架的整合,struts2才是web层框架中最强的,你见过有哪个web层框架现在整合其他框架用的是plugin形式?只要一个jar包就完全搞定了。这还能叫失败?那么我看不到成功的东西了。

struts2的核心是xwork,因为用到了ThreadLocal模式,所以那些Web容器中的对象会跟着当前Thread一跟到底,所以造成了struts2是很占用内存的,尤其是高并发的情况下,如果request的生命周期很长,你会看到内存不断上升。这个是struts2在性能上的一个问题,但是这个却能支撑起其他web框架无法支持的功能。

至于struts2的响应速度为什么不如springmvc或者其他的一些mvc框架来的快,这个也和自身的设计有关。struts2为每个响应都创建一个Action,并保证这个Action是线程安全的对象。但是其他的mvc框架,却还是基于servlet模式的,无法做到线程安全。所以我估计struts2在创建Action以及Action的执行环境中花费了比较多的时间,但是这个并没有什么数据上的支持,如果有时间,我倒是愿意来做一个测试,比较一下struts2和springmvc在响应一个web请求时,各个处理类之间的执行时间的比较。

像楼主这样子贴图,其实没有意义。因为你无法证明你的测试是标准的。而且,响应速度慢,需要分析其本质原因,而不是一概报怨,否则任何框架都会变得失去它的意义。


struts2我承认的确有很多强悍的功能,但是这些功能在实际项目中很少用到,就算用到,我想我们也会考虑其他的方式来实现吧,struts2用来做控制层跳转,虽然这个功能在大家的眼里是很一般的,但是别望了,我们用struts的起初目的就是这个很一般的功能,至于什么线程安全,我想spring中就能做到吧,因为我一直在用spring来做struts2的那种线程安全,而且用来也很优雅,可以选择有的action使用可以选择不使用,甚至你可以设置ThreadLocal到哪一个级别,是reuqest,还是session等~让你自己掌控控制层上的性能~
个人觉得,struts2其他的那些强悍的功能,我想是用来宣传struts2的一个卖点吧,如果没有亮点,谁又会去关注呢?~就像微软的sql server的例子一样,他那例子实际很少用到,可以说不是DBA基本不会去用,那他为什么还要去写这样的例子呢?~就是让其他人知道sql server还有亮点,让其他人不要去用oracle,其实是一个道理,一个好的框架,是让你控制的省心,用起来舒心,运行起来放心的~
我还是期待struts2的更新版本,希望能让我们把strusts2掌控在手中~希望强过与springmvc~
以上为个人的遇见,欢迎大家讨论~

补充一下,struts2的action做测试还是很好做的~因为action脱离servlet的api,所以测试起来很方便,赞一个~
0 请登录后投票
   发表时间:2010-06-02   最后修改:2010-06-02
其实是这样,在一个项目中盲目的引入一大堆的开源库是很不负责任的,动辄一个项目jar包就好几十MB,然后弄得很混乱,而且框架本身的Bug会造成一些不确定因素,像Spring Hibernate以前都遇到过很多Bug,再官方的论坛寻求帮助和查找问题花了大量的时间和精力,不过由于这些项目还是比较活跃的,所以很快就修复了。我个人觉得一个项目中引入的库还是越少越好,除非一些确实完成不了的任务才引入开源库,比如 全文搜索 缓存 生成Excel 这些比较复杂任务才加入 Lucene Ehcache jxl 这样的jar包。现在项目里面引入的jar最多也不超过10MB。
0 请登录后投票
   发表时间:2010-06-02  
hypercube1024 写道
其实是这样,在一个项目中盲目的引入一大堆的开源库是很不负责任的,动辄一个项目jar包就好几十MB,然后弄得很混乱,而且框架本身的Bug会造成一些不确定因素,像Spring Hibernate以前都遇到过很多Bug,再官方的论坛寻求帮助和查找问题花了大量的时间和精力,不过由于这些项目还是比较活跃的,所以很快就修复了。我个人觉得一个项目中引入的库还是越少越好,除非一些确实完成不了的任务才引入开源库,比如 全文搜索 缓存 生成Excel 这些比较复杂任务才加入 Lucene Ehcache jxl 这样的jar包。现在项目里面引入的jar最多也不超过10MB。


这个就跟架构有关系了,建议去看看系统架构方面的资料,用什么样的框架,怎么用,用多少,这些是根据实际的需求来决定的,不是一成不变的~


推荐大家看一个文章,个人觉得写的还是不错的,回复的帖子也很精彩,有兴趣的可以去瞧上两眼
http://www.iteye.com/topic/646240
0 请登录后投票
   发表时间:2010-06-02  
八页的帖子,居然没人说struts2因为是使用instance-per-request的因此会导致大量的短生命周期对象产生而需要对jvm参数调整。

struts2的default interceptor stack你会哭的,按需裁剪吧。

慢,一个quick start的东西,根本都没榨过性能,这些不带参考价值的。

有不看架构,不看设计直接调性能的么。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics