WEB開發框架性能基準測試解讀與趨勢分析前端
TechEmpower的《Web Framework Benchmarks》性能基準測試,是關注Web開發框架發展的重要途徑。可是內容數據衆多,每次看都耗費大量時間。這是根據Round17(2018-10-30)測試結果作的整理筆記,以及結合多輪結果作的趨勢分析。api
Web框架性能排名
首先,根據開發爲出發點,排除了純服務器和ORM不完善的框架。每種語言也僅僅選擇了一兩種性能靠前,比較知名的框架。專門的resty框架,也因爲差別較大,沒有收錄。所得的框架性能排名以下(以H2O服務器速度爲基準100%):前端框架
一、主流語言的異步框架
因爲Web開發的標杆語言Java的標誌性框架Spring,在SpringBoot2.0框架中推出了WebFlux異步核心。全面標誌着Web開發已經由大服務器與容器時代,轉向了異步時代。而Servlet技術所表明的容器技術,已經成了備選。服務器
這次,入選第一集團的全部框架都是異步框架。且都有着不輸於C++的性能表現。好比此次奪冠的是Rust語言框架Actix,有着純服務器50%以上的性能,比較讓人驚喜。須要說明的是這次數據中沒有出現SpringBoot,不過根據網上Vertx+SpringBoot的實際性能測試表現《Spring Boot同步架構與Vert.x異步架構高併發性能對比》,把SpringBoot加入了排名。多線程
二、新興語言的異步框架
這次,排名第二集團的全部框架,都是新興語言。使人詫異的是Golang的框架表現不佳。這可能和Golang的社區熱度不高有關。影響了相關框架的開發迭代速度,致使成熟度不高。Golang中性能最好的Iris框架這次沒有參評,否則性能仍是有提高空間的。而後,這次沒有收錄的Swift語言Vapor框架也是值得關注的。架構
三、腳本語言的異步框架
腳本語言因爲其原理限制,性能不能和主流語言比較,已是很是好的表現了。併發
四、主流語言的傳統框架
以Java語言Servlet容器技術爲表明的傳統框架,因爲不一樣技術的層層包裹之下,其性能已經被異步框架遠遠拋下。這次Spring框架7.3%的性能仍是有點偏低的,實際表現應該會更好。框架
五、腳本語言的傳統框架
以Ruby和Python語言爲表明的Web開發腳本語言,是表現比較穩定的框架。其提高空間也不會太大。它的異步框架,好比Python的Tornado和Sanic,因爲體系和機制的問題,性能有必定提高,但有限。異步
六、PHP語言的傳統框架
因爲Php語言的原理限制,對Php的性能影響最大的仍是其使用方式,不恰當的設計會使程序性能急劇降低,因此哪怕PHP的實際性能並不低的狀況下,其框架和程序的表現只能用糟糕來形容。實際使用中,Python和Php兩個功能基本類似的程序,性能相差5倍以上很常見。因此,對於Php你們仍是謹慎選擇。jvm
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++)
二、新興語言的異步框架
Amber(Crystal)
Ktor(Kotlin)
Gin(Golang)
Echo(Golang)
三、腳本語言的異步框架
Lapis(Lua)
Koa(Node.js)
Express(Node.js)
四、主流語言的傳統框架
SpringBoot+SpringMVC(Java)
五、腳本語言的傳統框架
Sinatra+Sequel(Ruby)
Django(Python)
Flask+SQLAlchemy(Python)
六、PHP語言的傳統框架
CodeIgniter(PHP)
Laravel(PHP)
(完)