天天看點

[原]Java MVC架構性能比較

Java MVC架構性能比較

- by zvane

現在各種MVC架構很多,各架構的優缺點網絡上也有很多的參考文章,但介紹各架構性能方面差别的文章卻不多,本人在項目開發中,感覺到采用了struts2架構的項目通路速度,明顯不如原來采用了struts1架構的項目快,帶着這些疑惑,我對各類MVC架構的做了一個簡單的性能分析比較,其結果應該說是基本符合預期的,可供大家參考。

測試環境:CPU:酷睿2 T5750,記憶體:DDR2-667 2G,Web容器:Tomcat6.0,最大線程數設定為1000,作業系統:WinXP-sp3

測試步驟:搭建6個Web工程,如下:

1.純JSP:不包含任何MVC架構,隻有一個測試用的JSP頁面。

2.struts1:包含一個Action,不做任何邏輯處理,直接轉發到一個JSP頁面

3.struts2 JSP:不包含Action,隻包含測試JSP頁面,直接通路該頁面。

4.struts2 單例Action:采用Spring來管理Struts2的Action執行個體,并配置成單例模式。

5.struts2 多例Action:采用Spring來管理Struts2的Action執行個體,并配置成單例模式。

6.SpringMVC3:采用Spring來管理Controller執行個體,包含一個Controller,不做邏輯處理,收到請求後,直接傳回到一個JSP頁面。

測試結果:

測試工程 請求數 并發數 總時間(s) 總時間(s) 總時間(s) 平均值(s) Requests Per Second(每秒處理請求數)
JSP 2000 200 5.55 3.59 4.11 4.42 452.83
struts1 2000 200 6.77 3.83 7.00 5.86 341.03
struts2 JSP 2000 200 25.20 26.30 24.11 25.20 79.35
struts2 單例Action 2000 200 28.36 27.59 27.69 27.88 71.74
struts2 多例Action 2000 200 31.31 31.97 39.56 34.28 58.34
SpringMVC3 2000 200 7.16 7.50 4.27 6.31 317.09

說明:以上測試雖不是非常的精确,但基本能說明一定的問題。每個JSP頁面和Action都不包含任何的業務邏輯代碼,隻是請求轉發。每輪測試取三次總時間的平均值。所有工程的測試均全部完成并正常處理請求,沒有請求拒絕情況發生。

結論:

1.純JSP的性能應該最高,這不難了解,JSP被編譯成Servlet後,沒有任何多餘的功能,收到請求後直接處理。(這也驗證一句經典的話:越原始效率就越高。)

2.struts1的性能是僅次于純JSP的,由于struts1采用單例Action模式,且本身的封裝相比struts2應該說簡單很多,雖然開發效率不如struts2,但已經過多年的實踐考驗,性能穩定高效。

3.相比來說struts2的性能就比較差了,這不難了解,struts2之是以開發友善,是由于采用值棧、OGNL表達式、攔截器等技術對請求參數的映射和傳回結果進行了處理,另外還采用大量的标簽庫等,這些都無疑增加了處理的時間。是以降低了效率。在我們實際的項目中,我測試本地工程通路每秒處理請求數隻能達到35左右,應該說還有不少可優化的空間。

4.很多人認為struts2性能差是因為它的多例Action模式導緻的,但我們采用spring管理struts2的Action,并設定按單例方式生成Action執行個體後,發現其性能有所提高,但并不是很明顯。由此可見,多例Action模式并不是struts2性能瓶頸所在。另外,我們在struts2中采用JSP方式通路,發現其性能依舊和沒有采用任何MVC架構的純JSP之間存在好幾倍的差距,這又從另一個側面證明了我們剛才得出結論,struts2性能的瓶頸不在于它的多例Action模式。       

5.SpringMVC3的性能略遜于struts1,但基本是同級别的,這讓人眼前一亮,springMVC有着不比struts2差的開發效率和解耦度,但性能卻是struts2的好幾倍,這讓我們灰常振奮,SpringMVC無疑又是項目開發的一個好的選擇。唯一的問題就是,目前國内使用面還不太多,各方面的參考資料相對較少,上手的話可能要稍微難點。