当前位置:首页 > 技术分析 > 正文内容

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

ruisui883个月前 (01-21)技术分析17

自从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了。

表上前缀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单项排名很好的体现了这一项:

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

相关文章:

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/435.html

标签: c# orm框架
分享给朋友:

“TechEmpower 21轮Web框架 性能评测 -- C# 的性能 和 Rust、C++并驾齐驱” 的相关文章

带你五步学会Vue SSR

作者:liuxuan 前端名狮转发链接:https://mp.weixin.qq.com/s/6K6GUHcLwLG4mzfaYtVMBQ前言SSR大家肯定都不陌生,通过服务端渲染,可以优化SEO抓取,提升首页加载速度等,我在学习SSR的时候,看过很多文章,有些对我有很大的启发作用,有些就只是照搬官...

「Git迁移」三行命令迁移Git包含提交历史,分支,tag标签等信息

问题描述:公司需要将一个git远程服务器的全部已有项目迁移到一台新服务器的Gitlab中,其中需要包含全部的提交纪录,已有的全部分支与全部打tag标签,目前此工作已全部迁移完毕,特此记录一下操作步骤环境描述:1. 要迁移的远程Git:Gitblit2. 迁移目的Git:Gitlab3. 暂存代码的P...

Python 幕后:Python导入import的工作原理

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)Python 最容易被误解的方面其中之一是import。Python 导入系统不仅看起来很复杂。因此,即使文档非常好,它也不能让您全面了解正在发生的事情。唯一方法是研究 Python 执行 import 语句时幕后发生的事情。注意:在这篇文...

vue3使用vue-router路由(路由懒加载、路由传参)

vue-router 是 vue的一个插件库1. 专门用来实现一个SPA单页面应用2 .基于vue的项目基本都会用到此库SPA的理解1) 单页Web应用(single page web application,SPA)2) 整个应用只有一个完整的页面3) 点击页面中的链接不会刷新页面, 本身也不会向...

Vue页面传参详解

一、两种方式方法1:name跳转页面this.$router.push({name:'anotherPage',params:{id:1}})另一页面接收参数方式:this.$route.params.id示例:控制台展示:方法2:path跳转页面this.$router.push(...

Vue实战篇|使用路由管理用户权限(动态路由)

权限控制是后台管理系统比较常见的需求,如果我们需要对某些页面的添加权限控制的话,那我们可以在路由管理中的权限做一些校验,没有通过权限校验的给出相应的提示或者直接跳转到报错页面。跟着我一起来学vue实战篇路由管理权限吧!权限校验函数getCurrentAuthority()函数用于获取当前用户权限,一...