云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Struts2性能問題的最終解決方法

          Posted on 2008-09-02 21:02 云自無心水自閑 閱讀(5453) 評論(5)  編輯  收藏 所屬分類: Java心得體會Struts2

          通過上兩篇文章的研究,
          詳見:
          我的struts2項目性能調(diào)優(yōu)三步曲:http://www.aygfsteel.com/usherlight/archive/2008/07/01/211869.html
          我的struts2項目性能調(diào)優(yōu)三步曲(續(xù)):http://www.aygfsteel.com/usherlight/archive/2008/07/12/214462.html
          得出的結(jié)論是:影響Struts2性能的原因在于Ognl的Value Stack的性能不佳。那么如果解決呢:


          * 我首先嘗試使用JSF。
          一開始選擇JSF的原因主要是:
          1、Stuts2自己提供了JSF的Plugin
          2、JSF是Sun作為標準提出,而且已經(jīng)通過的。從Google的趨勢搜索上也可以看出,搜索JSF的人在增多。
          3、JSF作為一種以組件為基礎(chǔ)的Web Framework有其獨到之處,其內(nèi)建的和其他許多開源的組件使用起來相當方便、強大。當然,對于不同的應(yīng)用來說也有不利之處(后面會提到),但是如果能夠堅持長期使用,逐漸積累組件庫的話,JSF是一個很好的選擇。
          4、JSF的文檔(或者說是書籍)還是比較多的。


          經(jīng)過測試使用后,發(fā)現(xiàn)其性能與Struts2相比確實提升不少。但是后來遇到了一個問題,所以最后還是放棄了JSF。這個問題是關(guān)于JSF的DataTable的,JSF提供的DataTable其實使用起來很方便,可定制化程度也不錯,只是剛好缺少了我所希望的功能(也可能是我不知道如何實現(xiàn))。我的應(yīng)用中的DataTable是一個動態(tài)的結(jié)果集,也就是說輸出的列是不能預(yù)先確定的,而DataTable卻要求先聲明好所有的DataColumn,我不知道如何解決這個問題。所以最后放棄了JSF。


          * 我的第二個選擇是FreeMarker
          選擇FreeMarker的原因是:
          1、FreeMarker是Struts2缺少的模板引擎,Struts2的標簽大部分是使用FreeMarker的,使用FreeMarker的話,連Plugin都省去了。
          2、FreeMarker相對比較輕量級、因為他本身只是一個模板引擎,與JSF這樣一個大而全的WebFramework相對,輕巧多了。
          3、FreeMarker的學習起來非常容易,只要把他網(wǎng)站上的Document過一遍,基本上就OK了。
          4、FreeMarker雖然體積小,功能還是相當強的,I18N,Converter之類的東西基本都全了,至少我所需要的功能全有。
          5、FreeMarker相當靈活,他不象JSF把底層的東西封裝了以后,暴露出一些屬性可以設(shè)置,如果你需要的屬性不能設(shè)置,你就沒有辦法了。在FreeMarker你直接操作最底層的東西,擁有很大的靈活性。當然,犧牲了一些方便性,比如,要用FreeMarker生成一個下拉框,就需要較多的工作量了。


          測試之后,使用FreeMarker的性能很不錯,在大數(shù)據(jù)量操作的情況下,至少一個數(shù)量級的性能提升。

          主要原因是freeMarker的值直接從action中取得的,所以避開了ognl的stack value.


          * 我的最終結(jié)論,如果要在Struts2中,展示或者操作大量數(shù)據(jù),強烈推薦使用FreeMarker。





          評論

          # re: Struts2性能問題的最終解決方法  回復(fù)  更多評論   

          2008-09-02 21:45 by 藍劍
          不太明白,怎樣不用Ognl的Value Stack而使用Freemarker?能詳細說說嗎?

          # re: Struts2性能問題的最終解決方法[未登錄]  回復(fù)  更多評論   

          2008-09-03 08:54 by jones
          JSF的DataTable可以通過binding屬性直接綁定到backing bean中實現(xiàn)后臺完全控制DataTable

          # re: Struts2性能問題的最終解決方法[未登錄]  回復(fù)  更多評論   

          2008-09-03 09:51 by 大王
          為什么不用JSP?

          # re: Struts2性能問題的最終解決方法  回復(fù)  更多評論   

          2008-09-03 14:21 by usherlight
          在struts.xml中,跳轉(zhuǎn)頁面的屬性設(shè)置為freeMarker
          <result name="success" type="freemarker">success.ftl</result>
          這樣,結(jié)果頁面由freeMarker來負責render, 關(guān)鍵點是:freeMarker的值是可以直接從action中取得的,所以避開了ognl的stack value.

          # re: Struts2性能問題的最終解決方法  回復(fù)  更多評論   

          2008-09-04 09:15 by 云自無心水自閑
          @jones
          謝謝分享你的經(jīng)驗
          主站蜘蛛池模板: 利川市| 诸暨市| 读书| 龙南县| 固安县| 清水县| 都昌县| 通渭县| 井陉县| 大足县| 金昌市| 铜山县| 宜章县| 定日县| 深水埗区| 体育| 黄骅市| 开原市| 景宁| 芮城县| 剑川县| 大新县| 荥阳市| 登封市| 红桥区| 葵青区| 湖北省| 长沙县| 金湖县| 宜州市| 右玉县| 宁远县| 肃宁县| 舒城县| 阳江市| 吴忠市| 呼和浩特市| 温泉县| 通许县| 周口市| 平顶山市|