隨筆-16  評論-54  文章-0  trackbacks-0
          ???? 最近在負責一個大項目,項目組成員包括項目經理大概10個人左右。項目技術用struts+spring+hibernate實現。項目的規模相對來說是比較大的,總共有10大模塊,每個大模塊又分為有十幾個、甚至幾十個小模塊。開發工具用eclipse,由于在開發階段,項目開發成員需要頻繁重啟服務器。在啟動服務器的時候,每次啟動時間總是會超過1分鐘。記得以前在做另外一個項目時,啟動時間不到5秒鐘,相差了10倍,而且項目規模是差不多的。

          ??? 從初步分析來說,應該是hibernate解釋hbm.xml時花費時間,或者可能是spring容器啟動并解釋所有的bean配置文件。診斷了一下,發現1分鐘消耗的時間主要分布在hibernate解釋hbm.xml花費5秒;spring容器從啟動到解釋bean配置文件竟然花了58秒,真是太囂張了。當時非常懷疑spring的效率問題。企圖從網上搜索相關資料,看看有什么優化措施。

          ??? 首先是找到了hibernate的啟動優化 http://www.hibernate.org/194.html? 里面的主要思想是通過將xml序列花到本地的文件里,每次讀取的時候根據情況,從本地文件讀取并反序列化,節省了hibernate xml的解析時間。按照這個方式測試了一下,發現hibernate的啟動時間從5秒降低到3秒,但是這個優化對于整個啟動過程是杯水車薪的,毫無用處。

          ??? 沒辦法,又仔細查看了spring的資料,終于發現spring的容器是提供了lazy-load的,即默認的缺省設置是bean沒有lazy-load,該屬性處于false狀態,這樣導致spring在啟動過程導致在啟動時候,會默認加載整個對象實例圖,從初始化ACTION配置、到service配置到dao配置、乃至到數據庫連接、事務等等。這么龐大的規模,難怪spring的啟動時間要花將近1分鐘。嘗試了一下,把beans的default-lazy-init改為true就,再次啟動,速度從原來的55秒,降到8秒鐘!!Great!雖然是非常小一個改動,但是影響確實非常大。一個項目組10個人,假若每個人一天平均需要在eclipse下啟動測試服務器50次。那么一天項目組需要重啟500次,每次節省50秒的話,就是25000秒,將近幾個小時,差不多一個工作日,多么可觀的數字!

          ?? 不過在運行期間第一次點頁面的時候,由于spring做了lazy-load,現在就需要啟動一部分需要的beans,所以稍微慢2-3秒鐘,但是明顯比等幾十秒要快很多,值得一鑒。

          ??? 以上是針對開發階段的spring容器啟動優化,在部署到實際環境中,倒是沒必要設置為lazy-load。畢竟部署到實際環境中不是經常的事,每次啟動1分鐘倒不是大問題。
          posted on 2006-07-29 13:27 jspark 閱讀(3276) 評論(2)  編輯  收藏

          評論:
          # re: 開發階段eclipse下面的spring容器的啟動優化 2006-07-31 10:24 | zsw

          為什么上網時不順便賺錢呢?
          一邊上網,一邊賺錢,無本萬利,趕快加入!
          http://www.15888.com/nbzsw3721   回復  更多評論
            
          # re: 開發階段eclipse下面的spring容器的啟動優化 2006-08-02 12:15 | cm4ever
          關于hibernate延遲加載,看我的實現:
          Hibernate動態模塊
          http://blog.csdn.net/cm4ever/archive/2006/06/14/795833.aspx  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 民权县| 大足县| 茶陵县| 阿城市| 阿拉善盟| 永州市| 湘潭县| 武威市| 江山市| 咸阳市| 乌拉特中旗| 磐石市| 普格县| 仲巴县| 铁力市| 连州市| 利津县| 光山县| 鹤壁市| 界首市| 龙胜| 保山市| 三都| 宜宾市| 南陵县| 手机| 宜州市| 涿州市| 玉环县| 日喀则市| 沭阳县| 桑植县| 金秀| 施甸县| 奉化市| 苍山县| 辉南县| 湄潭县| 鲁甸县| 江安县| 永德县|