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

          第一個(gè)Blog,記錄哈哈的生活

          常用鏈接

          留言簿(16)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          收藏夾

          Java links

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          從他們的 MVC 模型上面看,請(qǐng)求轉(zhuǎn)發(fā)的模型基本一致。
          性能的區(qū)別我覺(jué)得主要在 View 這一層上。

          Struts 將 JavaBean 轉(zhuǎn)至 JSP 頁(yè)面,來(lái)處理頁(yè)面顯示,比較直接,而 Struts 本身也是關(guān)注的是 MVC 的分離,在頁(yè)面處理方面并沒(méi)有給予過(guò)多的關(guān)注。直接的顯示讓 Struts 在 View 層的性能有比較好的表現(xiàn)。

          而 JSF 在 View 這一層:一、需要維護(hù)組件樹(shù)的狀態(tài)。二、需要使用渲染器來(lái)將組件渲染。性能就會(huì)比 Struts 差一些。


          從生命周期的角度上來(lái)看

          Struts 請(qǐng)求的基本周期是。經(jīng)過(guò) front servlet 的請(qǐng)求分發(fā),然后生成 command 對(duì)象,由 action 調(diào)用 Model 直至轉(zhuǎn)向 View。

          JSF 的基本周期是,經(jīng)過(guò) front servlet 請(qǐng)求分發(fā)(這一步同 struts),然后 restore view , apply request value, process validations , update model 這些生命周期相當(dāng)于 struts 生成 command 對(duì)象階段,invoke application 相當(dāng)于調(diào)用 model ,render response 相當(dāng)于轉(zhuǎn)向 view 階段。

          對(duì)比來(lái)看,請(qǐng)求分發(fā)階段不會(huì)產(chǎn)生更多的性能差異,然后對(duì)比其它階段
          struts 生成 command 對(duì)象階段包含 conversion 和部分 validation ,相當(dāng)于 JSF 的 apply request value 和 process validations 階段,但 JSF 還需要 restore view 和 update model(保持 Managed Bean 的狀態(tài)),性能會(huì)差一點(diǎn),但要補(bǔ)充的是 restore view 在 myfaces 的實(shí)現(xiàn)中,會(huì)將 view 對(duì)象放在客戶(hù)端保存(好象可以配置不保存),下一次請(qǐng)求如果有 view 對(duì)象,會(huì)直接反序列化得到 view root ,相當(dāng)于在客戶(hù)端 cache了,而 update model 只會(huì)在部分與數(shù)據(jù)相關(guān)的組件會(huì)使用。最后的 invoke application 與 struts 的調(diào)用 action ,然后 lifecycle 中的 render response 階段會(huì)找到對(duì)應(yīng)的 view 并轉(zhuǎn)向,然后由頁(yè)面的 tag 調(diào)用 render 來(lái)渲染出頁(yè)面。最后調(diào)用 tag 渲染頁(yè)面階段相當(dāng)于 struts 的前臺(tái)顯示,但由于更大粒度和更精細(xì)的渲染,在這個(gè)階段會(huì)與 struts 有一定的性能差。

          總體來(lái)說(shuō),JSF 使用了大量的 cache 手段,盡量減少一些性能開(kāi)銷(xiāo),但比 struts 增強(qiáng)的 backing bean 管理、事件處理能力和豐富的組件能力會(huì)讓 JSF 在生命周期性能上比 struts 略遜一籌。

          但這并不是所有的應(yīng)用場(chǎng)景性能上都要比 struts 差,比如:同樣是后臺(tái)數(shù)據(jù)驗(yàn)證的情況下,JSF 在驗(yàn)證錯(cuò)誤時(shí)立即會(huì)返回用戶(hù)頁(yè)面,而沒(méi)有經(jīng)驗(yàn)其它生命周期,可 struts 還是一樣會(huì)走完全部生命周期,這種情況 JSF 就會(huì)達(dá)到比 struts 更好的性能。

          瑕不掩瑜,性能上部分的劣勢(shì)并不能掩蓋 JSF 強(qiáng)大的功能和為我們省下的大量的時(shí)間,我相信 JSF 肯定會(huì)在將來(lái)的開(kāi)發(fā)中得到更多開(kāi)發(fā)者的青睞。

          posted on 2006-03-07 23:22 哈哈的日子 閱讀(2286) 評(píng)論(1)  編輯  收藏

          FeedBack:
          # re: 拋磚引玉,JSF 和 Struts 的性能比較。(原創(chuàng)) 2006-03-13 10:21 yangqing
          我覺(jué)得jsf的一個(gè)最大的好處是幫我們保存住了狀態(tài),這在傳統(tǒng)的web開(kāi)發(fā)(特別是複雜的)中是很頭痛得一件事,這也是文中說(shuō)的性能比struts差的一原因吧,但你自己去維護(hù)這些狀態(tài)的花銷(xiāo)也不少啊。  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 沁水县| 清徐县| 谢通门县| 大冶市| 满洲里市| 思茅市| 龙州县| 修文县| 故城县| 唐河县| 星座| 沅陵县| 元氏县| 正阳县| 黔西县| 西城区| 迁西县| 波密县| 河间市| 湘乡市| 德昌县| 吉安市| 慈溪市| 繁昌县| 蛟河市| 卢龙县| 阳山县| 伊金霍洛旗| 诸城市| 尉氏县| 平陆县| 东源县| 汉沽区| 安阳市| 万山特区| 萝北县| 桐柏县| 米林县| 平罗县| 莆田市| 册亨县|