论坛首页 Java企业应用论坛

用测试来对比分析struts与springMVC的性能

浏览 21076 次
精华帖 (2) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-06-09   最后修改:2011-06-09
mlw2000 写道

skzr.org 写道
实际上你这个分析考察的不再是mvc的性能了,包括了后台的sql执行效率。



第一:
其实我的结论很简单:

“对于一个普通的DELL PC服务器(1.6G hz cpu)来说,采用struts会额外消耗2.5ms的响应时间,采用spring会额外消耗1.5ms的响应时间”。


第二:
这样测试的结果可以作为我们系统技术选型的依据:

假如我们容许3%的性能损失,那么100毫秒以上的业务请求都可以随意使用MVC框架,剩余的关键请求可以采用servlet来处理。


第三:
单单就我测试的硬件环境来看,struts 吞吐量达到4000,spring达到6500;达到这个值的前提是“在action或者controller中几乎完全省略了业务逻辑”。考虑到在95%的情况下,系统的响应时间要求基本上都会超过100毫秒(对于10ms级的应用系统讨论就不需要讨论这个问题了),所以从这个意义上来说,我刚开始的测试可以说是是走入了一个误区,不过弄拙成巧,测试结果反过来从另一个角度解答了我们的疑问。


PS:对于关心servlet性能的同学,我也同期也测试了纯jsp+el表达式的实现,测试吞吐量在7000~8500之间漂移比较大,个人以我那台服务的硬件觉得8000已经是极限了,漂移也比较正常。


个人见解:
关键节点用servlet,其余完全可以MVC,至于选择哪个完全看爱好。



请问什么是关键节点?关键节点就没有业务逻辑了?
0 请登录后投票
   发表时间:2011-06-10   最后修改:2011-06-10

 

  1. 系统并发上限,不应当被struts2限制住了,因为到系统建设后期很多热点数据都会转移到内存或缓存中,这个时候热点页面的后台逻辑实际上是不耗时间的。
  2. 在易用性上spring3 mvc相比struts2来说更加好用。
  3. 在RESTful上和ajax中spring3 mvc比struts2更好用。


我单独测试jsp+el正在我的笔记本上一个table显示最高可以到1.5w/s

测试时特别注意网络的IO极有可能成为最终瓶颈,使用ajax是不错的选择。


实际上对于高负载的系统,优化到后面,mvc效率对系统并发也有很大的影响。

 

最终抛弃struts2是因为使用struts1过来的,后来搞struts2,感觉很多东西都是多余的,再后来解除spring3 mvc就被其简单易用迷住了

套用一句话:谁用谁知道!

struts1经历过7、8个大系统,struts2经历过2个大系统,spring3 mvc目前还没有。

感觉struts2比struts1设计好,不过却没有struts1易用阿,效率上也没有struts1好,很多时候struts2的哪些设计和考虑基本上在开发中都用不上。

后来RESTful和ajax后,spring3 mvc太棒了。

0 请登录后投票
   发表时间:2011-06-10   最后修改:2011-06-10

首先我承认struts2的性能肯定比不过spring(因为intercepter和prototype).

 

但是就我做的项目来说,没有一个项目会在mvc存在瓶颈

(如果在你的系统中 action 已经是最耗时的一层了 -.-!!  那就换用spring mvc/struts1/servlet吧)

 

struts2的设计非常好,最喜欢的是  intercepter,扩展性非常强,而且用起来也相当简单。struts2的配置也是亮点, 框架扩展性和易用性是我一直选择strurts2的最大的原因!

 

但是刚刚在看贴的时候,看到skzr.org老兄说spring3 mvc比strurts2还更好用?

 

印象中spring mvc的易用性大大落后于struts2,没有深入用过。 如果在性能、扩展性和易用性都非常好的,我可能会换spring3 mvc,也为了"spring生态"(一直认为"spring生态"中,mvc是最差的一环,所以没有用)

 

总之,先看看spring mvc再说吧.. 如果是真的话....

0 请登录后投票
   发表时间:2011-06-10  
downpour 写道
lnaigg 写道
如果没有高并发的场景,MVC的性能对整个系统影响应该是比较小的。

随着并发量增长,MVC的效率要求会有所提高,但不会是重点。

个人认为,性能瓶颈有90%都出在持久层。

MVC的选型一般会从架构方面、团队认可度方面考虑,不会从性能方面考虑。


所以楼主的分析是完全正确的。

我不知道为什么大家一直在纠结一个MVC框架的性能而不是它的可用度?我们引入一个框架的最终目的是什么?牺牲了哪些又得到了哪些好处?先明确这个问题,再来考虑这些不搭边的因素。


非常赞同,一个项目成功与否,程序开发的过程占的时间比例不高。能否减少代码量、是否开发效率高、易维护、用了框架,能在规定期完成项目才是正常的目标。
再好的框架和程序,交付不了,没有客户,全是浮云!
0 请登录后投票
   发表时间:2011-06-10  
struts和页面绑定的太多了。
比如数据验证啊,ognl绑定啊。原来解决了很多问题。
但是现在不需要了,jquery,ajax这些东西的存在,比他更方便,效果更好。现在要求的controller仅仅是需要返回一个文件流而已(jsp/json/xml)!

当然,如果你的系统完全是增删改查之间的跳转,那struts2 实在是太方便了。
否则 绝对是spring mvc更好。
0 请登录后投票
   发表时间:2011-06-10  
异常处理,权限验证,接口日志.......

intercepter真爽,粒度比filter小得多。 \("o")/
0 请登录后投票
   发表时间:2011-06-10  
supben 写道
struts和页面绑定的太多了。
比如数据验证啊,ognl绑定啊。原来解决了很多问题。
但是现在不需要了,jquery,ajax这些东西的存在,比他更方便,效果更好。现在要求的controller仅仅是需要返回一个文件流而已(jsp/json/xml)!

当然,如果你的系统完全是增删改查之间的跳转,那struts2 实在是太方便了。
否则 绝对是spring mvc更好。

struts2扩展性非常好,你说的这些完全可以实现(一个result而以)

而且页面绑定也不是struts最大的亮点,个人一直觉得没大用处,页面有jquery
0 请登录后投票
   发表时间:2011-06-10  
result里面还支持freemarker呢,10几种!但是一般的项目用的着么?
我的意思就是struts太庞大了啊。

struts tag不用,model-driven不用,validation不用,试问这不就是spring mvc么?
0 请登录后投票
   发表时间:2011-06-10  
这就比如ext和jquery,你ext用就用他整个的。
如果你仅仅是1-2个页面需要那种效果,其他部分仍然是传统的。
那还是该用ext还是jquery呢。
0 请登录后投票
   发表时间:2011-06-10   最后修改:2011-06-10
supben 写道
result里面还支持freemarker呢,10几种!但是一般的项目用的着么?
我的意思就是struts太庞大了啊。

struts tag不用,model-driven不用,validation不用,试问这不就是spring mvc么?


就像spring被抱怨庞大一样,spring的发展注定会集成多的jee技术,一样有老多人在那抱怨什么越来越像ejb, 但是别人spring的模块层次清析,各个部分独立。 集成这么多东西只能说明设计合理扩展性好。  这个道理同样适用于struts2

(ps:反正struts tag不用,有jquery。  struts2 validation导是非常方便,另外 js在前端做了验证,  不是说服务器端就不用验证。
0 请登录后投票
论坛首页 Java企业应用版

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