关于Struts的性能怀疑

03-12-04 layout
对于一个比较大型的项目采用Struts是否可取?

首先

1.actionservlet,如果使用Struts自身提供的Actionservlet的话,

是多个模块共用一个呢,还是对于不同的模块只是配置文件不同(moduleConfig)使用同一个ActionServlet呢?如果是对于不同的ActionServlet之间好像没有办法跳转.同一个ActionServlet会不

会造成瓶颈?(大量的访问堆积在ActionServlet层面,即使系统生

成了很多实例也恐怕不能够满足并发量400以上的访问?)

2.FormBean,FormBean的传递通常是通过request或者Session或者

context来进行的,这三种事实上都是存放一个映射关系,然后取出

来,都会涉及到对象的类型转换.这种转换在大量的并发操作下,会

造成资源的开销很大(从cpu和内存上面可以看得出来这种消耗,很

多内存不能及时回收..造成服务器的内存占用率斜线上升)

3.Action类的不灵活性.使用Action的时候如果不使用DispatchAction

的话,只能对应一个动作(submit)就需要一个Action类来对应处

理,这样子对于开发来说简直是一种灾难,拥有无数的只有一个

方法的类?同样的事情发生在FormBean上面.对于FormBean的DynaValidatorForm并不能真正解决问题,因为类型转换仍然频

繁发生.

4.严格按照Struts的规范而言是不是意味着两个jsp之间的所有通信(不包

括纯链接,带参数的在此范围内)都是通过ActionServlet和Action来发生

的?如果是的话,又会无端多出很多ForwardAction,虽然不需要手写,对于

ActionServlet来说压力又增加了,性能问题越发明显.

当然,以上只是一些个人意见,可能很多地方没有考虑得很清楚,希望大家一

起讨论讨论?

         

crogers
2003-12-04 23:50
如果项目规模不超过中国人均GDP最高的特区的OSS系统,那struts不会有问题

neutrino
2003-12-05 13:11
> 对于一个比较大型的项目采用Struts是否可取?

> 首先

> 1.actionservlet,如果使用Struts自身提供的Actionservlet?> 话,

> 是多个模块共用一个呢,还是对于不同的模块只是配置文件不?> (moduleConfig)使用同一个ActionServlet呢?如果是对于不同

> ActionServlet之间好像没有办法跳转.同一个ActionServlet

> 岵?> 会造成瓶颈?(大量的访问堆积在ActionServlet层面,即使系统

> ?> 成了很多实例也恐怕不能够满足并发量400以上的访问?)

很奇怪,你会说电脑就一个cpu造成瓶颈吗

> 2.FormBean,FormBean的传递通常是通过request或者Session?> 者

> context来进行的,这三种事实上都是存放一个映射关系,然后?> 出

> 来,都会涉及到对象的类型转换.这种转换在大量的并发操作下

> 会

> 造成资源的开销很大(从cpu和内存上面可以看得出来这种消耗

> 很

> 多内存不能及时回收..造成服务器的内存占用率斜线上升)

FormBean总在服务器端,不需要传递啊

> 3.Action类的不灵活性.使用Action的时候如果不使用Dispatc

> Action

> 的话,只能对应一个动作(submit)就需要一个Action类来对应?>

> 理,这样子对于开发来说简直是一种灾难,拥有无数的只有一个

>

> 方法的类?同样的事情发生在FormBean上面.对于FormBean的Dy

> aValidatorForm并不能真正解决问题,因为类型转换仍然频

> 繁发生.

对于每个请求Action和FormBen都是可选的

> 4.严格按照Struts的规范而言是不是意味着两个jsp之间的所?> 通信(不包

> 括纯链接,带参数的在此范围内)都是通过ActionServlet和Act

> on来发生

> 的?如果是的话,又会无端多出很多ForwardAction,虽然不需要

> 中?对于

> ActionServlet来说压力又增加了,性能问题越发明显.

不用担心ActionServlet

>

> 当然,以上只是一些个人意见,可能很多地方没有考虑得很清楚

> 希望大家一

> 起讨论讨论?

fromsun
2003-12-05 13:39
关于3:就算有dispatch actionservlet也不能从根本上解决问题,一个submit往往就是一种特定的操作和需求,必须有对应的code来处理,至于要写成action class这是没有办法的,framework这玩意就这样。

“大量的访问堆积在ActionServlet层面,即使系统生成了很多实例也恐怕不能够满足并发量400以上的访问?”

???

如果不能handle,那也不是actionservlet的问题,可能是cpu资源不够,其它关于性能的问题也是有一定道理的,framework往往把一个系统分割为多个“独立”的模块,相对于搞在一起性能上肯定是有牺牲的,但是不要忘了,老外的经典教条:速度不够用硬件弥补。

starfeng
2003-12-05 17:53
问题1:

一般是用同一个ActionServlet,当然你想用/abc/*.do对应ActionServlet1,/def/*.do对应ActionServlet2也可以

但是就算只用一个ActionServlet,但并不是说,Web服务器就只有一个线程在处量所有的请求,类和实例是不同的.

问题2:

关于大量的类型转换,类型转换是要一点时间,但那相对于业务的处理所要的时间来说可以计为零.而且,这里并没有大量的转换,无非,在由Form进Action的execute中,多了一次而已.

问题3:

>使用Action的时候如果不使用DispatchAction的话,..

那你就使用它就是了.

问题4:

>每个Action都会有ActionForward

这很正常啊,用户提交了他想要的操作,一般情况下,当然要给用户一个操作结果,JSP就是显示结果的地方,所以要Forward.

(当然Forward不一定只能到jsp)

猜你喜欢
3Go 1 2 3 下一页