随笔 - 175  文章 - 202  trackbacks - 0
<2006年3月>
2627281234
567891011
12131415161718
19202122232425
2627282930311
2345678

第一个Blog,记录哈哈的生活

常用链接

留言簿(16)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Java links

搜索

  •  

最新评论

阅读排行榜

评论排行榜

从他们的 MVC 模型上面看,请求转发的模型基本一致。
性能的区别我觉得主要在 View 这一层上。

Struts 将 JavaBean 转至 JSP 页面,来处理页面显示,比较直接,而 Struts 本身也是关注的是 MVC 的分离,在页面处理方面并没有给予过多的关注。直接的显示让 Struts 在 View 层的性能有比较好的表现。

而 JSF 在 View 这一层:一、需要维护组件树的状态。二、需要使用渲染器来将组件渲染。性能就会比 Struts 差一些。


从生命周期的角度上来看

Struts 请求的基本周期是。经过 front servlet 的请求分发,然后生成 command 对象,由 action 调用 Model 直至转向 View。

JSF 的基本周期是,经过 front servlet 请求分发(这一步同 struts),然后 restore view , apply request value, process validations , update model 这些生命周期相当于 struts 生成 command 对象阶段,invoke application 相当于调用 model ,render response 相当于转向 view 阶段。

对比来看,请求分发阶段不会产生更多的性能差异,然后对比其它阶段
struts 生成 command 对象阶段包含 conversion 和部分 validation ,相当于 JSF 的 apply request value 和 process validations 阶段,但 JSF 还需要 restore view 和 update model(保持 Managed Bean 的状态),性能会差一点,但要补充的是 restore view 在 myfaces 的实现中,会将 view 对象放在客户端保存(好象可以配置不保存),下一次请求如果有 view 对象,会直接反序列化得到 view root ,相当于在客户端 cache了,而 update model 只会在部分与数据相关的组件会使用。最后的 invoke application 与 struts 的调用 action ,然后 lifecycle 中的 render response 阶段会找到对应的 view 并转向,然后由页面的 tag 调用 render 来渲染出页面。最后调用 tag 渲染页面阶段相当于 struts 的前台显示,但由于更大粒度和更精细的渲染,在这个阶段会与 struts 有一定的性能差。

总体来说,JSF 使用了大量的 cache 手段,尽量减少一些性能开销,但比 struts 增强的 backing bean 管理、事件处理能力和丰富的组件能力会让 JSF 在生命周期性能上比 struts 略逊一筹。

但这并不是所有的应用场景性能上都要比 struts 差,比如:同样是后台数据验证的情况下,JSF 在验证错误时立即会返回用户页面,而没有经验其它生命周期,可 struts 还是一样会走完全部生命周期,这种情况 JSF 就会达到比 struts 更好的性能。

瑕不掩瑜,性能上部分的劣势并不能掩盖 JSF 强大的功能和为我们省下的大量的时间,我相信 JSF 肯定会在将来的开发中得到更多开发者的青睐。

posted on 2006-03-07 23:22 哈哈的日子 阅读(2278) 评论(1)  编辑  收藏

FeedBack:
# re: 抛砖引玉,JSF 和 Struts 的性能比较。(原创) 2006-03-13 10:21 yangqing
我覺得jsf的一個最大的好處是幫我們保存住了狀態,這在傳統的web開發(特別是複雜的)中是很頭痛得一件事,這也是文中說的性能比struts差的一原因吧,但你自己去维护这些状态的花销也不少啊。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: