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-三大惊喜变化的更多相关文章

  1. WEB开发框架性能排行与趋势分析

    WEB开发框架性能基准测试解读与趋势分析 TechEmpower的<Web Framework Benchmarks>性能基准测试,是关注Web开发框架发展的重要途径.但是内容数据众多,每 ...

  2. 基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作

    我们在使用EasyUI的时候,很多情况下需要使用到表格控件datagrid,这个控件控件非常强大,使用起来很简洁,但是我在使用中,发现对于一个表里面的外键字段进行转义,并显示引用表的一些名称的操作,却 ...

  3. 基于 Node.js 平台,快速、开放、极简的 web 开发框架。

    资料地址:http://www.expressjs.com.cn/ Express 基于 Node.js 平台,快速.开放.极简的 web 开发框架. $ npm install express -- ...

  4. 移动web开发框架

    纯粹的总结一下移动web开发框架,移动web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架,jQuery Mobile出自于jQuery家族 ...

  5. 常用移动web开发框架研究分析

    纯粹的总结一下移动web开发框架,移动web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架,jQuery Mobile出自于jQuery家族 ...

  6. 移动web开发框架研究

    纯粹的总结一下移动web开发框架,移动web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架.jQuery Mobile出自于jQuery家族 ...

  7. 根据自己的需要适度使用Web开发框架

    软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多.Web开发框架能够帮我们大大减少工作量,但是我们应该如何正确看待Web开发框架,并且如何去使用他们呢? 对框架的依赖 ...

  8. 全面解读Python Web开发框架Django

    全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...

  9. 选择移动web开发框架研究——有mui、frozenui以及Sencha Touch等

    纯粹的总结一下移动web开发框架,移动 web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架,jQuery Mobile出自于jQuery家 ...

随机推荐

  1. React Native学习记录

    1.端口问题 在调试的时候,监听的是8081端口.如果被占用,会报错,并且在reload的时候导致app直接崩掉. 2.插件网站收集 https://nativebase.io/ https://js ...

  2. github内的一些操作

    github远程仓库的克隆操作 1,找到你想要克隆的地址,复制下来 2,切入到git所在目录下,输入 git clone 复制的地址 设置过滤文件不纳入git管理 1,在git目录下创建一个.giti ...

  3. Docker(二):Docker镜像仓库Harbor搭建

    安装docker-compose 因为docker-compose下载容易失败, 所以选择从github下载方式安装. [root@harbor ~]# mv docker-compose-Linux ...

  4. 精尽Spring MVC源码分析 - HandlerAdapter 组件(一)之 HandlerAdapter

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  5. linux 配置本地yum源,配置国内yum源,配置epel源

    目录 一.配置本地yum源 二.配置国内yum源和epel源 一.配置本地yum源 1.挂载ISO镜像 mount -o loop /mnt/yum-iso/CentOS-7-x86_64-DVD-1 ...

  6. C#中的深度学习(三):理解神经网络结构

    在这篇文章中,我们将回顾监督机器学习的基础知识,以及训练和验证阶段包括哪些内容. 在这里,我们将为不了解AI的读者介绍机器学习(ML)的基础知识,并且我们将描述在监督机器学习模型中的训练和验证步骤. ...

  7. 2021韩顺平图解Linux课程(全面升级)基础篇

    第1章 Linux 开山篇-内容介绍 本套 Linux 课程内容 Linux 主要应用领域:服务器 第2章 Linux 基础篇-Linux 入门 Linux 之父 Linus Torvalds Git ...

  8. 连接数据库查询 将查询结果写入exce文件中

    package com.cn.peitest.connectDatabase; import java.io.File; import java.lang.reflect.Field; import ...

  9. 扫盲:Kotlin 的泛型

    引子 相信总是有很多同学,总是在抱怨泛型无论怎么学习,都只是停留在一个简单使用的水平,所以一直为此而备受苦恼. Kotlin 作为一门能和 Java 相互调用的语言,自然也支持泛型,不过 Kotlin ...

  10. 使用代码管理工具(git)管理代码的常用指令合集

    create a new repository on the command line echo "# test" >> README.md git init git ...