strust2性能问题,网上讨论对比转载

首先我们看一下网上的讨论:

1、影响Struts2性能的原因在于Ognl的Value Stack的性能不佳


Struts2性能问题的最终解决方法

http://www.blogjava.net/usherlight/archive/2008/07/01/211869.html

http://struts.apache.org/2.x/docs/performance-tuning.html

http://cwiki.apache.org/WW/performance-tuning.html

http://www.blogjava.net/usherlight/archive/2008/07/12/214462.html

意思就是更换模板引擎

2、struts2框架性能很好, 但struts2的标签性能太差了。 要避免使用 struts2标签。
Struts2 由于采用了 值栈、OGNL表达式、struts2标签库等,会导致性能下降,很严重的下降。如       果避免或减少使用这些,性能还是很好的。
Struts2的 多层拦截器、 多实例action性能都很好,并不是 导致性能问题的原因。 (这个其实和        jvm关于新生代有关系,一个频繁的NEW对象,并不会造成效率问题。)


Struts2、SpringMVC、Servlet(Jsp)性能对比 测试


多实例的Action,threadlocal方式.一个action变量不是跑到另外一个action中。但


参数传递确实存在共存的问题。@Scope("prototype")可以解决一部分。剩下的,如果在一个类中有多个Action,又有多个参数,可能会 有A Action需要用到的参数A 而B Action不需要,而A、B Action都有操作A参数的能力,这是存在的问题。所以,Action的组织方式需要好好考虑,在一个Controller中配置的Action尽量 REST化,每个Controller只解决一个资源的相关操作,不要把不相干的操作混合到一起。这样参数共享问题应该就是一个资源在不同状态下值的表现 形式地异化。

对于线程安全问题的处理
struts2采用的是ThreadLocal模式,针对每次请求都创建一个Action和当前线程进行绑定
而SpringMVC是方法级别的,请求参数什么的在方法的参数上;
因而不存在线程安全问题,我觉得这点设计算是一个亮点吧

3、http://m.oschina.net/blog/50604 也是强调ongl的问题

struts2与springMVC选择依据

1、公司内部技术积累

2、开发效率

3、代码质量(组件本身、及普通程序员写出的质量,当然, 这个更多的是靠公司设计理念)

4、技术资料完备性

5、运行效率的解决方案(倾向于对效率有比较好的解决方案的)

struts1和struts2的不同点

struts1实例化action是单例的,struts2不是单例,每次需要重新new一个action。

struts1的form是单独的,所以感觉不出来,其实是单例的,也正是form单独所以允许单例。struts2的form是和action 在一起,如果是单利的话form数据就存在缓存了。

spring可以控制实例化action是否单例,如果action交给spring实例化的话默认是单例的,如果加上scope="prototype"属性就可以重新实例化


1.struts2为每个线程提供一个action实例,多线程访问时不会出现问题。当使用spring管理struts2的action实例对象 时,scope必须配置为prototype或者session,若配置为singleton则多线程访问时会出现问题,例如 actionMessage,fieldError等信息会累加,多用户访问时有的用户访问到的是另一个用户的数据。

2.scope=“prototype”是为每个请求提供一个action实例(与struts2的机制是一样的)。
scope=“session”是为每个会话提供一个action实例。

3.通常使用prototype,即让spring容器为每个请求提供一个action实例,好处是服务器端不用维护用户状态信息,否则使用 session服务器端必须存储状态信息,用户多时占用服务器端内存过多。使用prototype时,必须自己在客户端维护用户的状态,每次访问服务端时 将相应状态信息提交给服务器。

例如scope=“prototype”时,页面一般< input name="id" type="hidden" value="${id}"/>用来存储用户的id信息,访问action时提交到server端供action中函数使用。而使用 scope=“session”时,页面不必使用hidden的对象隐藏id信息,只要服务端获取过用户的id,action中的id属性即会保存这个信 息。



草木全
分享到:
共 0 条  此列表为空  当前1/1页

© 2014 究问社区 copyRight 豫ICP备13003319号-1