云自無心水自閑

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

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

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

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


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


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


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


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

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


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





          評論

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

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

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

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

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

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

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

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

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

          2008-09-04 09:15 by 云自無心水自閑
          @jones
          謝謝分享你的經驗
          主站蜘蛛池模板: 西盟| 张家界市| 莱西市| 博白县| 栾川县| 扶余县| 浦东新区| 库伦旗| 德兴市| 麟游县| 长兴县| 济阳县| 柳江县| 聂拉木县| 镇平县| 随州市| 罗山县| 浦城县| 闸北区| 凉城县| 保德县| 丹凤县| 岚皋县| 林周县| 织金县| 新余市| 富裕县| 屏东市| 陆川县| 永嘉县| 丁青县| 奈曼旗| 巩义市| 青海省| 罗田县| 石屏县| 龙泉市| 东乡县| 潜江市| 海口市| 六枝特区|