Java MVC框架性能比較
現(xiàn)在各種MVC框架很多,各框架的優(yōu)缺點(diǎn)網(wǎng)絡(luò)上也有很多的參考文章,但介紹各框架性能方面差別的文章卻不多,本人在項(xiàng)目開發(fā)中,感覺到采用了struts2框架的項(xiàng)目訪問(wèn)速度,明顯不如原來(lái)采用了struts1框架的項(xiàng)目快,帶著這些疑惑,我對(duì)各類MVC框架的做了一個(gè)簡(jiǎn)單的性能分析比較,其結(jié)果應(yīng)該說(shuō)是基本符合預(yù)期的,可供大家參考。
測(cè)試環(huán)境:CPU:酷睿2 T5750,內(nèi)存:DDR2-667 2G,Web容器:Tomcat6.0,***線程數(shù)設(shè)置為1000,操作系統(tǒng):WinXP-sp3
測(cè)試步驟:搭建6個(gè)Web工程,如下:
1.純JSP:不包含任何MVC框架,只有一個(gè)測(cè)試用的JSP頁(yè)面。
2.struts1:包含一個(gè)Action,不做任何邏輯處理,直接轉(zhuǎn)發(fā)到一個(gè)JSP頁(yè)面
3.struts2 JSP:不包含Action,只包含測(cè)試JSP頁(yè)面,直接訪問(wèn)該頁(yè)面。
4.struts2 單例Action:采用Spring來(lái)管理Struts2的Action實(shí)例,并配置成單例模式。
5.struts2 多例Action:采用Spring來(lái)管理Struts2的Action實(shí)例,并配置成單例模式。
6.SpringMVC3:采用Spring來(lái)管理Controller實(shí)例,包含一個(gè)Controller,不做邏輯處理,收到請(qǐng)求后,直接返回到一個(gè)JSP頁(yè)面。
測(cè)試結(jié)果:
測(cè)試工程請(qǐng)求數(shù)并發(fā)數(shù)總時(shí)間(s)總時(shí)間(s)總時(shí)間(s)平均值(s)Requests Per Second(每秒處理請(qǐng)求數(shù))
JSP20002005.55 3.59 4.11 4.42 452.83
struts120002006.77 3.83 7.00 5.86 341.03
struts2 JSP200020025.20 26.30 24.11 25.20 79.35
struts2 單例Action200020028.36 27.59 27.69 27.88 71.74
struts2 多例Action200020031.31 31.97 39.56 34.28 58.34
SpringMVC320002007.16 7.50 4.27 6.31 317.09
說(shuō)明:以上測(cè)試雖不是非常的精確,但基本能說(shuō)明一定的問(wèn)題。每個(gè)JSP頁(yè)面和Action都不包含任何的業(yè)務(wù)邏輯代碼,只是請(qǐng)求轉(zhuǎn)發(fā)。每輪測(cè)試取三次總時(shí)間的平均值。所有工程的測(cè)試均全部完成并正常處理請(qǐng)求,沒有請(qǐng)求拒絕情況發(fā)生。
結(jié)論:
1.純JSP的性能應(yīng)該***,這不難理解,JSP被編譯成Servlet后,沒有任何多余的功能,收到請(qǐng)求后直接處理。(這也驗(yàn)證一句經(jīng)典的話:越原始效率就越高。)
2.struts1的性能是僅次于純JSP的,由于struts1采用單例Action模式,且本身的封裝相比struts2應(yīng)該說(shuō)簡(jiǎn)單很多,雖然開發(fā)效率不如struts2,但已經(jīng)過(guò)多年的實(shí)踐考驗(yàn),性能穩(wěn)定高效。
3.相比來(lái)說(shuō)struts2的性能就比較差了,這不難理解,struts2之所以開發(fā)方便,是由于采用值棧、OGNL表達(dá)式、攔截器等技術(shù)對(duì)請(qǐng)求參數(shù)的映射和返回結(jié)果進(jìn)行了處理,另外還采用大量的標(biāo)簽庫(kù)等,這些都無(wú)疑增加了處理的時(shí)間。因此降低了效率。在我們實(shí)際的項(xiàng)目中,我測(cè)試本地工程訪問(wèn)每秒處理請(qǐng)求數(shù)只能達(dá)到35左右,應(yīng)該說(shuō)還有不少可優(yōu)化的空間。
4.很多人認(rèn)為struts2性能差是因?yàn)樗亩嗬鼳ction模式導(dǎo)致的,但我們采用spring管理struts2的Action,并設(shè)置按單例方式生成Action實(shí)例后,發(fā)現(xiàn)其性能有所提高,但并不是很明顯。由此可見,多例Action模式并不是struts2性能瓶頸所在。另外,我們?cè)趕truts2中采用JSP方式訪問(wèn),發(fā)現(xiàn)其性能依舊和沒有采用任何MVC框架的純JSP之間存在好幾倍的差距,這又從另一個(gè)側(cè)面證實(shí)了我們剛才得出結(jié)論,struts2性能的瓶頸不在于它的多例Action模式。
5.SpringMVC3的性能略遜于struts1,但基本是同級(jí)別的,這讓人眼前一亮,springMVC有著不比struts2差的開發(fā)效率和解耦度,但性能卻是struts2的好幾倍,這讓我們灰常振奮,SpringMVC無(wú)疑又是項(xiàng)目開發(fā)的一個(gè)好的選擇。唯一的問(wèn)題就是,目前國(guó)內(nèi)使用面還不太多,各方面的參考資料相對(duì)較少,上手的話可能要稍微難點(diǎn)。
【編輯推薦】