WEB開發框架性能排行與趨勢分析

来源:https://www.cnblogs.com/windfic/archive/2019/03/08/10498296.html
-Advertisement-
Play Games

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)

 

(完)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.引入template文件 <script src = js/template-native.js></script> 2.寫模板 <script type="text/template" id="模板ID"> 模板內容 </script> 3.執行模板 var html = template(" ...
  • 開始的開始,簡單粗暴。在微信小程式里,一行 wx.getUserInfo 即可彈窗用戶授權登陸。大部分小程式圖省事,直接在打開小程式的時候就調這個方法。所以那時候一個印象就是隨便打開一個小程式,進去就是彈窗讓我登陸,想拿我的微信信息,給人一種不安全的感覺。 ...
  • three.js,webGL,3D庫房,3D機房,普通3D機房搭建,機櫃、伺服器、埠實時監控 數據聯動展示,機櫃動態添加、伺服器上下架,動力環境數據可視化展示(溫濕度雲圖,防盜門禁,配店,管線控制)、告警展示 ...
  • 總結:附上Swiper學習的網址:前端一定要學習和去瞭解,幫助是很大的,可以通過簡短的代碼實現出特別好的效果,先簡單介紹到這裡吧,以後有機會繼續學習補充... Swiper中文網站: https://www.swiper.com.cn/ SwiperAPI網站:https://www.swiper.... ...
  • vue3+typescript中引入外部文件有幾種方法 (eg:引入echarts) 第一種方法: 1 indext.html中用script引入 2 在.vue頁面使用,先聲明後使用 這樣就可以正確使用 第二種方法 1 在項目目錄下 npm install @types/echarts --sav ...
  • 由於擴展標準的逐漸一致, 現在同一擴展代碼庫已經有可能同時用於Chrome和火狐. 下麵是一個簡單的工具欄按鈕和彈窗(尚無任何實際功能): 代碼庫地址: "nobodxbodon/suan1" 所有代碼: manifest.json: 彈窗/主界面.html 彈窗/主界面.css 待續... ...
  • 預期伺服器返回的數據類型。如果不指定,jQuery 將自動根據 HTTP 包 MIME 信息返回 responseXML 或 responseText,並作為回調函數參數傳遞,可用值: "xml": 返回 XML 文檔,可用 jQuery 處理。 "html": 返回純文本 HTML 信息;包含 s ...
  • 效果: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...