WEB开发框架性能排行与趋势分析2-三大惊喜变化
WEB开发框架性能排行与趋势分析2-三大惊喜变化
Web框架性能排名
上一次基于TechEmpower的《Web Framework Benchmarks》性能基准测试的解读之后,时隔两年此次Round19(2020-05-28)榜单有了三个令人兴奋的变化:

注:带星号的项目支持完整的ORM和模板技术
一、神奇的Lithium
C++和Rust都是只提供编译期反射的,所以实现ORM的方法有两种,一种是带生成器,需要工具和预处理。一种是利用宏和模板技术来生成代码。
Lithium这个项目和其它妖艳贱货不一样,代码优雅得一塌糊涂,而且性能惊人Lithium(ORM)(RAW)以 59.2%的成绩一骑绝尘。虽然使用和模板有点烧脑,但还是值得一看。
对比Rust的Diesel,仅取得了24%的成绩还是有很大提升空间的。Golang的框架测试代码中没有一个带ORM,是因为Golang的反射机制还是很慢的,直接拖累了性能。
auto fortunes = sql_orm_schema(sql_db, "Fortune").fields(
s::id(s::auto_increment, s::primary_key) = int(),
s::message = std::string()); my_api.get("/fortunes") = [&](http_request& request, http_response& response) {
sql_db.max_async_connections_per_thread_ = fortunes_nconn; typedef decltype(fortunes.all_fields()) fortune;
std::vector<fortune> table; {
auto c = fortunes.connect(request.fiber);
c.forall([&] (const auto& f) { table.emplace_back(metamap_clone(f)); });
}
table.emplace_back(0, "Additional fortune added at request time."); std::sort(table.begin(), table.end(),
[] (const fortune& a, const fortune& b) { return a.message < b.message; }); li::growing_output_buffer ss; ss << "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>";
for(auto& f : table)
{
ss << "<tr><td>" << f.id << "</td><td>";
escape_html_entities(ss, f.message);
ss << "</td></tr>";
}
ss << "</table></body></html>"; response.set_header("Content-Type", "text/html; charset=utf-8");
response.write(ss.to_string_view());
};
二、恐怖的Workerman
PHP一直热衷于各种用底层代码来提升性能,但是由于各种原因,成果有限。即使异步PHP框架swoole的出现,彻底舍弃了PHP的基本机制,使得性能有了极大提升,也没有引起大的改变,但纯PHP实现的异步框架Workerman却有可能改变这一情况。使用Workerman的Ubiquity框架竟然打败了一众框架勇夺第二名。性能提升几十倍,堪称恐怖。原来PHP已经足够优秀,只是打开方式不对。
Act(ORM)(Rythm): 28.9%
Ubiquity(ORM)(PHP):28.1%
Actix(Diesel)(HBS): 23.6%
AspCore(EF)(ASP): 23.3%
三、意外的Roda
由于JavaScript使用Node.js的异步机制,使得JS框架出道即巅峰,其它脚本语言只有奋起追赶的份。此次PHP打了一个翻身仗,让JavaScript的领先的局面,一下子变得落后一步。
而来自Ruby阵营的变化也让Ruby有了超过JavaScript的可能,Roda的性能在已经是Python性能一倍的基础上再翻一倍,在没有完全使用异步架构的情况下,有如此成绩,让人不禁有所期待。
脚本开发的性能排名也从JavaScript>Ruby>Python>>>>>>>>>PHP,变成了PHP>>>Ruby>JavaScript>Python。Python也从感觉良好一下子变成了学渣,没有了存在感。
附表
C++
Drogon
排名:Drogon(RAW)(CSP):100%
Drogon(MORM)(CSP):81.6%
仓库:https://github.com/an-tao/drogon
Lithium
排名:Lithium(ORM)(RAW): 59.2%
仓库:https://github.com/matt-42/lithium
Rust
Actix-web
排名:Actix(RAW)(HBS): 89.5%
Actix(Diesel)(HBS): 23.6%
仓库:https://github.com/actix/actix-web
May-minihttp
排名:May-minihttp(RAW)(Markup): 70.3%
仓库:https://github.com/Xudong-Huang/may_minihttp
Go
Atreugo
排名:Atreugo(RAW)(QuickT): 53.4%
仓库:https://github.com/savsgio/atreugo
Gofiber
排名:Gofiber(RAW)(QuickT): 44.5%
仓库:https://github.com/gofiber/fiber
iris-go
排名:(未知)
仓库:https://github.com/kataras/iris
Java
Vert.x
排名:Vert.x(RAW)(Rocker): 51.2%
仓库:https://github.com/eclipse-vertx/vert.x
Jooby
排名:Jooby(RAW)(Rocker): 46.1%
仓库:https://github.com/jooby-project/jooby
ActFramework
排名:Act(ORM)(Rythm): 28.9%
仓库:https://github.com/actframework/actframework
C#
AspCore
排名:AspCore(RAW)(ASP): 42.1%
AspCore(EF)(ASP): 23.3%
Crystal
Kemal
排名:Kemal(RAW)(ECR):30.8%
仓库:https://github.com/kemalcr/kemal
Kotlin
http4k
排名:http4k(RAW)(PEB):29.9%
仓库:https://github.com/http4k/http4k
PHP
workerman
排名:workerman(RAW)(PHP): 52.0%
kumbiaphp(RAW)(PHP):36.8%
Ubiquity(ORM)(PHP):28.1%
仓库:https://github.com/walkor/workerman
https://github.com/KumbiaPHP/KumbiaPHP
https://github.com/phpMv/ubiquity
swoole
排名:swoole(RAW)(PHP): 41.8%
ubiquity(ORM)(PHP):20.7%
Imi(ORM)(PHP):17.9%
仓库:https://github.com/swoole/swoole-src
https://github.com/phpMv/ubiquity
https://github.com/Yurunsoft/IMI
Laravel
排名:Laravel-swoole(ORM)(PHP): 3.1%
Laravel(ORM)(PHP): 0.8%
仓库:https://github.com/laravel/laravel/
Ruby
Roda
排名:Roda(sequel)(ERB): 7.5%
仓库:https://github.com/jeremyevans/roda
Sinatra
排名:Sinatra(sequel)(Slim): 5.0%
仓库:https://github.com/sinatra/sinatra
JavaScript
Nestjs
排名:Nestjs(ORM)(HBS): 10.0%
仓库:https://github.com/nestjs/nest
Koa
排名:Koa(ORM)(HBS): 6.8%
仓库:https://github.com/koajs/koa
Python
Sanic
排名:Sanic(RAW)(Jinja2): 9.6%
仓库:https://github.com/sanic-org/sanic
Django
排名:Django(ORM)(TMP): 2.2%
仓库:https://github.com/django/django
Flask
排名:Flask(RAW)(Jinja2): 3.4%
Flask(ORM)(Jinja2): 1.5%
仓库:https://github.com/pallets/flask
WEB开发框架性能排行与趋势分析2-三大惊喜变化的更多相关文章
- WEB开发框架性能排行与趋势分析
WEB开发框架性能基准测试解读与趋势分析 TechEmpower的<Web Framework Benchmarks>性能基准测试,是关注Web开发框架发展的重要途径.但是内容数据众多,每 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作
我们在使用EasyUI的时候,很多情况下需要使用到表格控件datagrid,这个控件控件非常强大,使用起来很简洁,但是我在使用中,发现对于一个表里面的外键字段进行转义,并显示引用表的一些名称的操作,却 ...
- 基于 Node.js 平台,快速、开放、极简的 web 开发框架。
资料地址:http://www.expressjs.com.cn/ Express 基于 Node.js 平台,快速.开放.极简的 web 开发框架. $ npm install express -- ...
- 移动web开发框架
纯粹的总结一下移动web开发框架,移动web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架,jQuery Mobile出自于jQuery家族 ...
- 常用移动web开发框架研究分析
纯粹的总结一下移动web开发框架,移动web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架,jQuery Mobile出自于jQuery家族 ...
- 移动web开发框架研究
纯粹的总结一下移动web开发框架,移动web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架.jQuery Mobile出自于jQuery家族 ...
- 根据自己的需要适度使用Web开发框架
软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多.Web开发框架能够帮我们大大减少工作量,但是我们应该如何正确看待Web开发框架,并且如何去使用他们呢? 对框架的依赖 ...
- 全面解读Python Web开发框架Django
全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...
- 选择移动web开发框架研究——有mui、frozenui以及Sencha Touch等
纯粹的总结一下移动web开发框架,移动 web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架,jQuery Mobile出自于jQuery家 ...
随机推荐
- Android Studio中SVN的使用
1.忽略文件 1)这种方式,每次新建一个项目都要添加,并不是全局的. .idea文件夹 .gradle文件夹 所有的build文件夹 所有的.iml文件 local.properties文件 2)使用 ...
- Day2 列表list
list 列表 list是Python内置的一种数据类型, 是一种有序的集合, 可以随时添加或删除其中的元素,可以包含不同数据类型的元素.可以作为元素被别的list包含 . nam ...
- Jmeter之分布式执行测试 (2)
一. 安装Java 1.1下载JDK 1) Windows安装jdk,下载完成后,双击安装 2) Linux解压:tar -zxvf jdk-8u74-linux-x64.gz 1.2 Java环境变 ...
- Linux内核中container_of宏的详细解释
上一节拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)我们在分析Linux内核链表的时候注意到内核在求解结构体偏移的时候巧妙的使用了container_of宏定义,今天我们来详细剖 ...
- Linux 修改权限,查看进程,结束进程 命令
在linux终端先输入ll,可以看到bai如:-rwx-r--r-- (一共10个参数) 表示文件所属组和du用户的对应权限.zhi第一个跟dao参数属于管理员,跟chmod无关,先不管.2-4参数: ...
- 红黑树规则,TreeSet原理,HashSet特点,什么是哈希值,HashSet底层原理,Map集合特点,Map集合遍历方法
==学习目标== 1.能够了解红黑树 2.能够掌握HashSet集合的特点以及使用(特点以及使用,哈希表数据结构) 3.能够掌握Map集合的特点以及使用(特点,常见方法,Map集合的遍历) 4.能够掌 ...
- Spring-IOC注解编程
这里的注解是最初级的一些注解,掌握了之后再学习其它的注解 注解扫描 <?xml version="1.0" encoding="UTF-8"?> & ...
- 小白经典CNN论文复现系列(一):LeNet1989
小白的经典CNN复现系列(一):LeNet-1989 之前的浙大AI作业的那个系列,因为后面的NLP的东西我最近大概是不会接触到,所以我们先换一个系列开始更新博客,就是现在这个经典的CNN复现啦(。・ ...
- 支付业务优化else if 代码
背景 最近在做项目的时候,需要接入支付.由于接入第三方支付而且还不知止一家,需要接入很多家.比如说支付宝.微信.富友支付等.每家支付都一个回调.现如今的代码,根据不同的第三方支付一大堆else if判 ...
- Raft算法系列教程4:日志不一致的解决
网络不可能一直处于正常情况,因为Leader或者某个Follower有可能会崩溃,从而导致日志不能一直保持一致.因此存在以下三种情况: (1)Follower缺失当前Leader上存在的日志条目.(2 ...