精华帖 (2) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (12)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-07
你得出了什么结论
每个测试结果的条件相差太大 建议只修改一个条件测试 |
|
返回顶楼 | |
发表时间:2010-12-07
哎,发现很多人都只停留在“用框架”的阶段,楼主测出来了,你们只知道一味的质疑,就不会自己动下手?概括一下质疑类型
1、hibernate影响了struts,请认真看主贴,LZ同时测试了有数据库操作和没数据库操作的情况; 2、什么spring暗地排斥struts呀,不想说了 3、OGNL和plus 什么XX,可以单纯地用各自MVC部分,你会发现struts还是比spring mvc慢 4、有些人说init的时间长,这个有点道理,但测试的时候可以通过“预热”的办法规避。 5、有些说什么这种测试条件不能代表所有情况的呀,典型的睁眼说瞎话。又不想说了。 其实struts2比spring慢很容易解析,这与struts的设计哲学相关,struts的设计者不在乎对象的多少,在乎的是如何与Servlet解耦,每个请求一个Action实例,可以优雅的OO,QueryString中的parameter会被注入到Action中设置的同名的field中。 那struts产生如此之多的短生命对象,我们就不用它了吗?建议大家都去实现一个自己的MVC框架你也同样会遇到这个问题的。 哥当年自己搞了个很简单的MVC,只实现了核心部分-控制跳转,无非根据一个url调用Action里指定的方法,通过分析字符串,可以将Action的名字和方法名都找到,问题是我每个请求都实例化一个Action吗?哥当年没敢这么做,而是在程序一启动的时候就实例化好所有的Action,当请求到来时找到对应的实例再调用它方法,这样做就要求开发人员不用将与本次请求相关的数据放到Action中,就跟Servlet一样,好处是对象少,坏处是要小心谨慎,自己拿捏吧。 |
|
返回顶楼 | |
发表时间:2010-12-07
接上面的
其实jvm 会自动管理struts产生的大量对象,而对于一个典型的web流程 请求 --> mvc --> dao操作,花费在dao上的时间是最长的,老程序员写的程序大部分的web性能瓶颈都是在db上,这个是没办法的,虽说可以通过db pool和cache技术来缓解。所以说struts上的性能操作比起db来占不到零头,所以大可不必惊慌。 当然,对于精益求精的同学来说,可以通过对比选择最适合的。 另外,我们项目组就在用struts,而且自己有一套框架把ssh整起来了,感觉这些框架就是把程序员当”傻子“,你想犯错都难,而用Servlet,你稍不留神就会犯错了,当然我说的是对于新手。 |
|
返回顶楼 | |
发表时间:2010-12-07
最后修改:2010-12-07
关键是看怎么合理搭配使用,Struts2个人觉还好。
|
|
返回顶楼 | |
发表时间:2010-12-26
pengzhoushuo 写道 哎,发现很多人都只停留在“用框架”的阶段,楼主测出来了,你们只知道一味的质疑,就不会自己动下手?概括一下质疑类型
1、hibernate影响了struts,请认真看主贴,LZ同时测试了有数据库操作和没数据库操作的情况; 2、什么spring暗地排斥struts呀,不想说了 3、OGNL和plus 什么XX,可以单纯地用各自MVC部分,你会发现struts还是比spring mvc慢 4、有些人说init的时间长,这个有点道理,但测试的时候可以通过“预热”的办法规避。 5、有些说什么这种测试条件不能代表所有情况的呀,典型的睁眼说瞎话。又不想说了。 其实struts2比spring慢很容易解析,这与struts的设计哲学相关,struts的设计者不在乎对象的多少,在乎的是如何与Servlet解耦,每个请求一个Action实例,可以优雅的OO,QueryString中的parameter会被注入到Action中设置的同名的field中。 那struts产生如此之多的短生命对象,我们就不用它了吗?建议大家都去实现一个自己的MVC框架你也同样会遇到这个问题的。 哥当年自己搞了个很简单的MVC,只实现了核心部分-控制跳转,无非根据一个url调用Action里指定的方法,通过分析字符串,可以将Action的名字和方法名都找到,问题是我每个请求都实例化一个Action吗?哥当年没敢这么做,而是在程序一启动的时候就实例化好所有的Action,当请求到来时找到对应的实例再调用它方法,这样做就要求开发人员不用将与本次请求相关的数据放到Action中,就跟Servlet一样,好处是对象少,坏处是要小心谨慎,自己拿捏吧。 每一楼都看了,还是pengzhoushuo说的不错,很多人都是随意意测,如:pengzhoushuo说的1、2、3、4点中已经解释了 貌似大家都浮躁,基本上走马观花的看东西,然后开始下结论了 我的测试结果: 环境:ubuntu desktop 64位,cpu core2 P8400 2.26G, 4G mem jvm: sun jdk 1.6.0_23 64bit 64位tomcat7:maxThread=10,(运行测试时看到总内存使用了1.4G内存),java_opts=-server struts2,spring3 mvc,helloworld.jsp(里面只有hello ${message}) 用例: 1. struts2 helloworld.do直接跳转到helloworld.jsp 2. sprint mvc helloworld跳转到helloworld.jsp MyEclipse中启动tomcat进行测试: 测试:ab -n 10000 -c 10 多次运行后结论 struts2:低于2000/s spring3 mvc:4600->6000/s 直接访问jsp : 5000->7000/s 所以现在在突击spring3 mvc,学习下 |
|
返回顶楼 | |
发表时间:2010-12-27
最后修改:2010-12-27
skzr.org 写道 pengzhoushuo 写道 哎,发现很多人都只停留在“用框架”的阶段,楼主测出来了,你们只知道一味的质疑,就不会自己动下手?概括一下质疑类型
1、hibernate影响了struts,请认真看主贴,LZ同时测试了有数据库操作和没数据库操作的情况; 2、什么spring暗地排斥struts呀,不想说了 3、OGNL和plus 什么XX,可以单纯地用各自MVC部分,你会发现struts还是比spring mvc慢 4、有些人说init的时间长,这个有点道理,但测试的时候可以通过“预热”的办法规避。 5、有些说什么这种测试条件不能代表所有情况的呀,典型的睁眼说瞎话。又不想说了。 其实struts2比spring慢很容易解析,这与struts的设计哲学相关,struts的设计者不在乎对象的多少,在乎的是如何与Servlet解耦,每个请求一个Action实例,可以优雅的OO,QueryString中的parameter会被注入到Action中设置的同名的field中。 那struts产生如此之多的短生命对象,我们就不用它了吗?建议大家都去实现一个自己的MVC框架你也同样会遇到这个问题的。 哥当年自己搞了个很简单的MVC,只实现了核心部分-控制跳转,无非根据一个url调用Action里指定的方法,通过分析字符串,可以将Action的名字和方法名都找到,问题是我每个请求都实例化一个Action吗?哥当年没敢这么做,而是在程序一启动的时候就实例化好所有的Action,当请求到来时找到对应的实例再调用它方法,这样做就要求开发人员不用将与本次请求相关的数据放到Action中,就跟Servlet一样,好处是对象少,坏处是要小心谨慎,自己拿捏吧。 每一楼都看了,还是pengzhoushuo说的不错,很多人都是随意意测,如:pengzhoushuo说的1、2、3、4点中已经解释了 貌似大家都浮躁,基本上走马观花的看东西,然后开始下结论了 我的测试结果: 环境:ubuntu desktop 64位,cpu core2 P8400 2.26G, 4G mem jvm: sun jdk 1.6.0_23 64bit 64位tomcat7:maxThread=10,(运行测试时看到总内存使用了1.4G内存),java_opts=-server struts2,spring3 mvc,helloworld.jsp(里面只有hello ${message}) 用例: 1. struts2 helloworld.do直接跳转到helloworld.jsp 2. sprint mvc helloworld跳转到helloworld.jsp MyEclipse中启动tomcat进行测试: 测试:ab -n 10000 -c 10 多次运行后结论 struts2:低于2000/s spring3 mvc:4600->6000/s 直接访问jsp : 5000->7000/s 所以现在在突击spring3 mvc,学习下 那些开源的框架都是大而全,太多功能其实都用不上,比如国际化、支持多种视图、和其他框架的整合等等,导致响应速度缓慢,现在我自己写了一个mvc框架,很轻量,比struts,springMVC什么的性能好些,性能和纯Servlet差不多吧,使用上就和spring3MVC差不多,也是基于annotation和RestURL的 ^_^ |
|
返回顶楼 | |
发表时间:2011-01-09
好文章,我很喜欢这种较真儿的文章
|
|
返回顶楼 | |
发表时间:2011-04-03
楼主这个性能观察器是自己写的java程序吗?可以共享下吗?先谢谢了
|
|
返回顶楼 | |
发表时间:2011-04-03
LZ精神赞
不过个人觉得,对于struts2的实验,LZ没有做完 这个简单的例子并不能得出LZ的结论 大胆猜测,严谨结论 |
|
返回顶楼 | |
发表时间:2011-04-04
kgd1120 写道 本人觉得struts2性能差是正常的,因为struts2的Action对象是Prototype类型的,而且分离Servelt API时大量的用到Java的反射机制,Java的发射恰恰又是非常影响性能。
Java的发射恰恰又是非常影响性能,据说jdk1.5后差别不大 |
|
返回顶楼 | |