TechEmpower 21轮Web框架 性能评测 — C# 的性能 和 Rust、C++并驾齐驱

自从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 已经在排行榜里面找不到了。

asp.net core从去年的综合得分第八名上升一位到了第7名,排名虽然只提升1位,但是相对第一名的性能,从去年的 68%提升到了 83.7%,这个提升不可谓不巨大,要知道排前面都是rust, c++选手,已经比较接近了,都在7000级别,另外,论使用量, asp.net core在前10名的框架中毫无疑问是最多的。 性能已经是asp.net core的优势了,相对java主流框架, go全部框架来看,都是如此,更别说世界上最好的语言PHP了。

  • 第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单项排名很好的体现了这一项:

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选项卡。一些实现每秒实现非常多的请求,但是以相当大的延迟成本。

相关文章:

Original: https://www.cnblogs.com/shanyou/p/16536009.html
Author: 张善友
Title: TechEmpower 21轮Web框架 性能评测 — C# 的性能 和 Rust、C++并驾齐驱

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/536213/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • (筆記) 如何寫入binary file某個byte的值? (C/C++) (C)

    Abstract通常公司為了保護其智慧財產權,會自己定義檔案格式,其header區會定義每個byte各代表某項資訊,所以常常需要直接對binary檔的某byte直接進行寫入。 In…

    C++ 2023年5月29日
    048
  • C++ #ifndef/#define/#endif解释

    作用:防止头文件的重复包含和编译 ifndef x define x endif 比如说有一个头文件叫head.h,这是一个通用的头文件,然后我又定义了两个自己用的头文件,分别叫l…

    C++ 2023年5月29日
    041
  • [c++] 拷贝构造函数

    拷贝构造函数就是进行对象拷贝复制的函数。 拷贝构造函数也是一种构造函数。它用同类型的对象来初始化新创建的对象。其唯一的形参是const类型&,此函数也由系统自动调用。 拷贝…

    C++ 2023年5月29日
    051
  • error: Microsoft Visual C++ 14.0 is required问题最佳解决方法

    对于程序员来说,经常pip安装自己所需要的包,大部分的包基本都能安装,但是总会遇到包安装不了的问题,预研学习的动力第一步就被安装包给扼杀了。其中最受困扰的就是这个问题:error:…

    C++ 2023年5月29日
    053
  • maya2018 + VS2017 C++编译环境搭建

    下载: https://www.autodesk.com/developer-network/platform-technologies/maya 解压,将devkitBase下的…

    C++ 2023年5月29日
    060
  • C++/服务器开发4天实战训练营

    第一天: 1.四种不同的方式来实现add函数 //面向过程 int add1(int a, int b) { return a + b; } //面向对象 class ADD{ p…

    C++ 2023年5月29日
    045
  • VC++ 使用attributes定义接口

    1.定义预处理命令_ATL_ATTRIBUTES 2.在一个全局的Cpp文件里面配置module的attribute [module(dll, uuid = "{3845…

    C++ 2023年5月29日
    065
  • C++20新特性

    conceptrequiresconstinitconstevalco_awaitco_returnco_yieldchar8_t 优点:1)没有头文件;2)声明实现仍然可分离, …

    C++ 2023年5月29日
    067
  • 34.C++-QT信号槽分析

    moc 元对象编译器, 全称是 Meta-Object Compiler,也就是”元对象编译器”。是QT翻译扩展语法到C++语言的工具,目前见扩展了信号与槽…

    C++ 2023年5月29日
    055
  • 【C++服务端技术】对象池

    代码没贴全,就少一个锁头文件,可以做设计参考 设计思想就是维护一个空闲链表,没有用的就重新申请,有的话就拿链表的头,使用完又还给空闲链表。 /* 一个分配固定大小内存的内存池,使用…

    C++ 2023年5月29日
    066
  • 【面试攻略】C++面试-边锋

    2020-11-26-边锋 1.说说你以前的架构2.C++11特性,好像问到了这个constexpr https://www.jianshu.com/p/5480c4a35d1d3…

    C++ 2023年5月29日
    057
  • C++ Memory Order

    为什么需要Memory Order 原子操作(简单语句,C++也不保证是原子操作) 指令执行顺序(编译器可能优化代码使代码顺序发生变化,CPU可能会调整指令执行顺序) CPU可见性…

    C++ 2023年5月29日
    060
  • 如何分析和提高(C/C++)程序的编译速度?

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。 本文链接:https://www.cnblogs.com/lihuidashe…

    C++ 2023年5月29日
    090
  • c++ 智能指针的向下转换 向下塑型 cast

    class A { public: void test() { std::cout << "test" << std::endl; } …

    C++ 2023年5月29日
    068
  • 【C++】第1章 在VS2015中用C++编写控制台应用程序

    分类:C++、VS2015 创建日期:2016-06-12 看到不少人至今还在用VC 6.0开发工具学习C++,其实VC 6.0开发工具早就被淘汰了。这里仅介绍学习C++时推荐使用…

    C++ 2023年5月29日
    067
  • EclipseC++学习笔记-1 环境搭建

    最近一个项目使用的EclipseC++编写的,所以需要搭建一个EclipseC++平台开发。1、windows下载https://www.eclipse.org/downloads…

    C++ 2023年5月29日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球