WEB開發框架性能基準測試解讀與趨勢分析 TechEmpower的《Web Framework Benchmarks》性能基準測試,是關註Web開發框架發展的重要途徑。但是內容數據眾多,每次看都耗費大量時間。這是根據Round17(2018-10-30)測試結果做的整理筆記,以及結合多輪結果做的趨勢 ...
WEB開發框架性能基準測試解讀與趨勢分析
TechEmpower的《Web Framework Benchmarks》性能基準測試,是關註Web開發框架發展的重要途徑。但是內容數據眾多,每次看都耗費大量時間。這是根據Round17(2018-10-30)測試結果做的整理筆記,以及結合多輪結果做的趨勢分析。
Web框架性能排名
首先,根據開發為出發點,排除了純伺服器和ORM不完善的框架。每種語言也僅僅選擇了一兩種性能靠前,比較知名的框架。專門的resty框架,也由於差異較大,沒有收錄。所得的框架性能排名如下(以H2O伺服器速度為基準100%):
1、主流語言的非同步框架
由於Web開發的標桿語言Java的標誌性框架Spring,在SpringBoot2.0框架中推出了WebFlux非同步核心。全面標志著Web開發已經由大伺服器與容器時代,轉向了非同步時代。而Servlet技術所代表的容器技術,已經成了備選。
此次,入選第一集團的所有框架都是非同步框架。且都有著不輸於C++的性能表現。比如這次奪冠的是Rust語言框架Actix,有著純伺服器50%以上的性能,比較讓人驚喜。需要說明的是此次數據中沒有出現SpringBoot,不過根據網上Vertx+SpringBoot的實際性能測試表現《Spring Boot同步架構與Vert.x非同步架構高併發性能對比》,把SpringBoot加入了排名。
2、新興語言的非同步框架
此次,排名第二集團的所有框架,都是新興語言。令人詫異的是Golang的框架表現不佳。這可能和Golang的社區熱度不高有關。影響了相關框架的開發迭代速度,導致成熟度不高。Golang中性能最好的Iris框架此次沒有參評,不然性能還是有提升空間的。然後,此次沒有收錄的Swift語言Vapor框架也是值得關註的。
3、腳本語言的非同步框架
腳本語言由於其原理限制,性能不能和主流語言比較,已經是非常好的表現了。
4、主流語言的傳統框架
以Java語言Servlet容器技術為代表的傳統框架,由於不同技術的層層包裹之下,其性能已經被非同步框架遠遠拋下。此次Spring框架7.3%的性能還是有點偏低的,實際表現應該會更好。
5、腳本語言的傳統框架
以Ruby和Python語言為代表的Web開發腳本語言,是表現比較穩定的框架。其提升空間也不會太大。它的非同步框架,比如Python的Tornado和Sanic,由於體系和機制的問題,性能有一定提升,但有限。
6、PHP語言的傳統框架
由於Php語言的原理限制,對Php的性能影響最大的還是其使用方式,不恰當的設計會使程式性能急劇下降,所以哪怕PHP的實際性能並不低的情況下,其框架和程式的表現只能用糟糕來形容。實際使用中,Python和Php兩個功能基本相似的程式,性能相差5倍以上很常見。所以,對於Php大家還是謹慎選擇。
Web框架發展趨勢分析
有人說,非同步框架就是把單線程變成了多線程,每個任務並沒有變化。這種觀點是不正確的。非同步框架之所以有著近5倍的巨大性能提升,主要得益於開源。開源使得原來由非同步核心+Web伺服器+Servlet容器+JSP+Web框架等許許多多軟體配合的事情,變成由一個框架來提供,中間節省了巨大的空間和時間開銷。所以Web框架的發展方向是偏平化,逐步會淘汰中間環節,變成大一統框架。一如Spring框架的演變過程。
另一方面,腳本語言原本生態上就是以開源為根基,框架融合帶來的性能提升並沒有主流語言那麼大。腳本語言的開發地位會發生動搖。畢竟如果主流語言的性能有10到20倍提升,那麼腳本語言的開發速度就不再是關註重點。
最後,我們可以看到,隨著前端框架的發展,數據與頁面分離成為常態。摧生了大量的Resty框架。revenj-jvm的性能甚至達到了70.5%。而且,可以預見的,Resty框架會迅速向GraphQL為代表的查詢語言框架演進。Web框架將會變得越來越快,越來越薄。
附表
1、主流語言的非同步框架
Actix+Diesel(Rust)
Vert.x+SpringBoot(Java)
ActFramework(Java)
AspCore+Kestrel(.Net)
Silicon Web(C++)
2、新興語言的非同步框架
Amber(Crystal)
Ktor(Kotlin)
Gin(Golang)
Echo(Golang)
3、腳本語言的非同步框架
Lapis(Lua)
Koa(Node.js)
Express(Node.js)
4、主流語言的傳統框架
SpringBoot+SpringMVC(Java)
5、腳本語言的傳統框架
Sinatra+Sequel(Ruby)
Django(Python)
Flask+SQLAlchemy(Python)
6、PHP語言的傳統框架
CodeIgniter(PHP)
Laravel(PHP)
(完)