TechEmpower 21輪Web框架 性能評測 -- C# 的性能 和 Rust、C++並駕齊驅

来源:https://www.cnblogs.com/shanyou/archive/2022/07/30/16536009.html
-Advertisement-
Play Games

自從2021年2月第20輪公佈的測試以後,一年半後 的2022年7月19日 發佈了 TechEmpower 21輪測試報告:Round 21 results - TechEmpower Framework Benchmarks。Techempower benchmark是包含範圍最廣泛的web框架性 ...


自從2021年2月第20輪公佈的測試以後,一年半後 的2022年7月19日 發佈了 TechEmpower 21輪測試報告:Round 21 results - TechEmpower Framework Benchmarks。Techempower benchmark是包含範圍最廣泛的web框架性能測試,覆蓋了比較典型的使用場景,其可參考性極強。另外,所有測試源代碼和軟硬體配置都開放,基本得到大家的認可。

TechEmpower基準測試有許多場景(也稱為測試類型),此次評測多了一個綜合評分選項,把擁有完整測試覆蓋的框架現在將具有綜合分數,這反映了測試項目類型的總體性能得分:JSON serialization, Single-query, Multi-query, Updates, Fortunes 和 Plaintext. 。對於每一輪,我們使每個測試類型的結果規範化,然後為每個測試類型應用主觀權重(例如,Fortunes的權重比 Plaintext 高,因為Fortunes 是一種更現實的測試類型)。asp.net core排第7名,主流排名第3名,asp.net 已經在排行榜裡面找不到了。

image

asp.net core從去年的綜合得分第八名上升一位到了第7名,排名雖然只提升1位,但是相對第一名的性能,從去年的 68%提升到了 83.7%,這個提升不可謂不巨大,要知道排前面都是rust, c++選手,已經比較接近了,都在7000級別,另外,論使用量, asp.net core在前10名的框架中毫無疑問是最多的。 性能已經是asp.net core的優勢了,相對java主流框架, go全部框架來看,都是如此,更別說世界上最好的語言PHP了。

表上首碼T標簽表示精選的主流編程語言:https://www.techempower.com/benchmarks/#section=data-r21&test=composite

  • 第1名 C++的drogon 7801分
  • 第2名 Rust的actix  7667分
  • 第6名 C#的ASP.NET Core 7077分
  • 第63名 Go的gin  1943分
  • 第67名 Java的Spring 1846分
  • 第113名 基於Elixir的 phoenix 687 分
  • 第116名 Nodejs的Express 615分
  • 第130名 PHP的laravel 371分
  • 第131名 Ruby的 rails 366分
  • 第137名 Python的django 274分

應用性能直接影響到托管服務的成本,因此公司在開發應用時需要格外註意應用所使用的Web框架,初創公司尤其如此。此外,糟糕的應用性能也會影響到用戶體驗,甚至會因此受到相關搜索引擎的降級處罰。在選擇框架時,又有許多因素需要考量,但原始性能無疑是其中最容易測評的。不同的框架性能差異極大,即使你充分利用了硬體的性能,錯誤的框架依然可能帶來十倍的性能損耗,雖然不是每個人都會遇到如此極端的情況,但在某些情況下確實如此,因此你有必要瞭解各框架之間的性能差異。

在當今無伺服器和容器的時代,很高興看到行業競爭併在冷啟動和記憶體消耗方面進行艱難的測試,PlaintText單項排名很好的體現了這一項:

image

Fortunes測試類型是最有趣的,因為它包括使用對象關係映射器(ORM)和資料庫。這是Web應用程式/服務中的常見用例。以前版本的ASP.NET Core在這種情況下表現不佳。由於堆棧和PostgreSQL驅動程式中的優化,ASP.NET Core 2.1得到了顯著改進, 3.1 版本又 提升到了27萬,5.0版本提升到了40萬,6.0版本提升到了45萬。 其他方案不太代表典型的應用程式。他們強調堆棧的特定方面。如果它們與您的用例緊密匹配,它們可能會很有趣。對於框架開發人員,他們幫助識別進一步優化堆棧的機會。 例如,考慮Plaintext方案。此方案涉及客戶端發送16個請求背靠背(流水線),伺服器知道響應,而無需執行I / O操作或計算。這不代表典型的請求,但它是解析HTTP請求的良好壓力測試。 每個實現都有一個類。例如,ASP.NET Core Plaintext具有platform, micro和full 實現。full 的實現是使用MVC中間件。Micro實現在管道級實現,platform實現直接建立在Kestrel之上。雖然Platform 類提供了引擎功能強大的概念,但它不是用於應用程式開發人員編程的API。 基準測試結果包括Latency選項卡。一些實現每秒實現非常多的請求,但是以相當大的延遲成本。

相關文章:

歡迎大家掃描下麵二維碼成為我的客戶,為你服務和上雲


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

-Advertisement-
Play Games
更多相關文章
  • 介紹 本篇文章主要針對於電腦二級考試的崽崽,當然想瞭解Python和學習Python的崽崽也是可以看本篇文章的;畢竟,手機和電腦都可以運行Python;本篇我文章雖然是筆記,但是也純靠手打,希望關註和點贊一下,期待我的其他隨筆和文章;文章作者由博客園狐小妖用戶撰寫,非來自於博客園且不帶轉載註明,均 ...
  • 前言:最近幾個月很忙,都沒有時間寫文章了,今天周末剛好忙完下班相對早點(20:00下班)就在家把之前想總結的知識點寫出來,於是就有了這篇文章。雖無很高深的技術,但小技巧有大用處。 有時我們經常需要將實現了某個基類或某個介面的所有Bean進行分類管理,在需要用到的時候按需獲取實現了某個基類或某個介面的 ...
  • 最近學習了es的視頻,感覺這個產品對於查詢來說非常方便,但是如何應用到我們自己的 產品中來呢。因為我們的產品數據更新太快,其實不太適合用es做主力存儲。並且我們的業務還沒有到那種巨量級別,產品的伺服器容量也有限,所以我打算根據es的倒排索引的原理,自己寫一個查詢的組件。 我的理解是這樣的,有大量的文 ...
  • 終止線程的執行 一、強制終止線程的執行 強制終止用的是stop()方法,因為這種方法會丟失數據,所以一般不採用這種方法。 原理是直接殺死線程,這樣的話線程中沒有保存的數據就會丟失 /* 在java中強制終止一個線程 */ public class ThreaTest09 { public stati ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 獲取線程對象的名稱 1.獲取當前線程對象 //調用當前線程對象,currentThread()這方法出現在main()方法中,當前線程就是主線程 //這代碼出現在哪,就是獲取到哪個線程對象 Thread t=Thread.currentCurrent() 2.獲取線程對象的名字 String nam ...
  • 據我理解,標簽是為了使得jsp內容更加簡潔,編寫起來更加方便,不用再去在jsp里寫大段的java代碼,標簽就顯得與html格外契合;當然,並不是一定要使用標簽,只用jsp的語法來寫java代碼也可以實現功能,只是稍顯繁瑣。 言歸正傳,我們在使用標簽之前首先需要導入兩個依賴 <dependency> ...
  • 作者:Steven Giesel 翻譯:Alan Wang 校對:李衛涵 – 微軟 MVP 排版:Rani Sun 有什麼比參考包含分步說明和代碼示例的動手教程更好的學習新技術的方式呢?當你完成或 fork 本教程後,你將得到這樣一個應用程式: Steven Giesel 最近發佈了一個由5部分內容 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...