开源的 Web 框架哪个快?我在 GitHub 找到了答案
在开源这片自由的土地上,孕育了太多开源 Web 框架。我在 GitHub 上搜了一下“web framework”关键字显示有 56000+ 匹配的开源项目,它们百花齐放各有特色,覆盖多种语言。
相信做过 Web 开发的程序员,都能说出好几个 Web 框架,如数家珍般地说出它们的好。比如我用过的 Python Web 框架有:Django、Tornado、Flask、FastAPI。这些 Web 框架各有特色:
- Django 的大而全
- Flask 的微小上手快
- 专门开发接口的 FastAPI
不同的 Web 框架,在应对不同场景和需求时各有千秋,所以很难片面的说那个 Web 框架就是最好的,但如果单从速度方面比较的话,还是可以比出个高低的! 今天介绍的开源项目,就试图找出最快的开源 Web 框架。
介绍
web-frameworks 定时发布多种开源 Web 框架性能测试报告的项目,告诉你谁是最快的 Web 框架!
它采用 Ruby 语言编写,首先通过 Docker 启动待压测的 Web 框架,启动后通过 wrk 压测服务,最后把测试报告发布到网站上,结果支持搜索和排序功能,整个过程完全自动化。
具体的测试参数和机器配置:
wrk:HTTP 基准测试工具,支持压测和输出测试报告。
wrk 的相关参数:8 线程(-t),压 15 秒(-d),分别采用并发(-c) 64、256、512 模式压测了三次。我在本机用 wrk 对掘金网站做了压测,用来讲解报告的相关数据。
命令:wrk -t8 -d15s -c64 --latency https://juejin.cn
结果及名词解释:
机器配置:
- CPU: 8 Cores (AMD FX-8320E Eight-Core Processor)
- RAM: 16 GB
- OS: Linux
项目中涉及的所有测试,用的都是相同配置的机器,相关的所有代码均已开源。尽可能公平公正,完全透明。测试结果还会随着 Web 框架的版本迭代而更新,
下面来看看 web-frameworks 最新一期的测试报告。
最快的框架
web-frameworks 测出来的平均延迟,从低到高排序:
1、nickel
Star 数:2.9k|语言:Rust
一个受 Express.js 启发的 Rust Web 框架。示例代码:
#[macro_use] extern crate nickel;
use nickel::{Nickel, HttpRouter};
fn main() {
let mut server = Nickel::new();
server.get("**", middleware!("Hello World"));
server.listen("127.0.0.1:6767");
}
2、iron
Star 数:5.9k|语言:Rust
示例代码:
extern crate iron;
extern crate time;
use iron::prelude::*;
use iron::{typemap, AfterMiddleware, BeforeMiddleware};
use time::precise_time_ns;
struct ResponseTime;
impl typemap::Key for ResponseTime { type Value = u64; }
impl BeforeMiddleware for ResponseTime {
fn before(&self, req: &mut Request) -> IronResult<()> {
req.extensions.insert::<ResponseTime>(precise_time_ns());
Ok(())
}
}
impl AfterMiddleware for ResponseTime {
fn after(&self, req: &mut Request, res: Response) -> IronResult<Response> {
let delta = precise_time_ns() - *req.extensions.get::<ResponseTime>().unwrap();
println!("Request took: {} ms", (delta as f64) / 1000000.0);
Ok(res)
}
}
fn hello_world(_: &mut Request) -> IronResult<Response> {
Ok(Response::with((iron::StatusCode::OK, "Hello World")))
}
fn main() {
let mut chain = Chain::new(hello_world);
chain.link_before(ResponseTime);
chain.link_after(ResponseTime);
Iron::new(chain).http("localhost:3000");
}
由于篇幅问题,这里仅介绍报告中前 2 名的框架。
最能扛的框架
web-frameworks 测出来的平均每秒处理请求数,从高到低排序:
1、activej
Star 数:286|语言:Java
适用于 Web、高负载和微服务的 Java 框架。示例代码:
class Main extends HttpServerLauncher {
@Provides
AsyncServlet servlet() {
return request -> HttpResponse.ok200()
.withPlainText("Hello World");
}
public static void main(String[] args) throws Exception {
Launcher launcher = new HttpHelloWorldExample();
launcher.launch(args);
}
}
2、httpbeast
Star 数:239|语言:Nim
示例代码:
import options, asyncdispatch
import httpbeast
proc onRequest(req: Request): Future[void] =
if req.httpMethod == some(HttpGet):
case req.path.get()
of "/":
req.send("Hello World")
else:
req.send(Http404)
run(onRequest)
由于篇幅问题,这里仅介绍报告中前 2 名的框架。
感受
本文内容有限无法展示所有的指标,点击这里查看更多指标和分类的报告。
看完这份 Web 框架测试报告,我发现 Rust 写的 Web 框架在不同的性能指标的测试结果中都名列前茅,看来 Rust 在性能方面真的是名不虚传。
当然性能不是评判一个 Web 框架的唯一标准,今天写这个项目也是希望可以给大家在选择 Web 的时候提供一个参考。而且报告中有冷门但具有特点的 Web 框架,可作为玩具项目玩一玩,如果哪天突然火起来的时候,你可能已经抢占先机、轻车熟路了。
最后,web-frameworks 的测试结果共包含 237 个 Web 框架,虽然不多但是这个数字还在不断增加...而且 issues 里还有很多 Web 框架申请“出战”,开源社区的力量正在让这个项目越来越好,看到这里我就放心了。
以上就是本文的全部内容,希望通过这个开源项目可以让你找到最快、最能扛的 Web 框架,性能上快人一步!
关注 HelloGitHub 公众号 第一时间收到更新。
还有更多开源项目的介绍和宝藏项目等待你的发现。
开源的 Web 框架哪个快?我在 GitHub 找到了答案的更多相关文章
- 推荐 5 个 yyds 的开源 Python Web 框架
提到 Python 的 Web 框架,第一反应就是老三样,Django,Flask 和 Tornado.如果按流行度来排名的话,应该也是这个顺序. 在 2016 年,发布了一款 Web 框架,叫 Sa ...
- Go实战--也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)
ris自称是Go语言中所有Web框架最快的,它的特点如下: 1.聚焦高性能 2.健壮的静态路由支持和通配符子域名支持. 3.视图系统支持超过5以上模板 4.支持定制事件的高可扩展性Websocket ...
- python笔记-19 javascript补充、web框架、django基础
一.JavaScript的补充 1 正则表达式 1.1 test的使用 test 测试是否符合条件 返回true or false 1.2 exec的使用 exec 从字符串中截取匹配的字符 1.3 ...
- JAVA web 框架集合
“框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...
- 搞懂 XML 解析,徒手造 WEB 框架
恕我斗胆直言,对开源的 WEB 框架了解多少,有没有尝试写过框架呢?XML 的解析方式有哪些?能答出来吗?! 心中没有答案也没关系,因为通过今天的分享,能让你轻松 get 如下几点,绝对收获满满. a ...
- 用一个文件,实现迷你 Web 框架
当下网络就如同空气一样在我们的周围,它以无数种方式改变着我们的生活,但要说网络的核心技术变化甚微. 随着开源文化的蓬勃发展,诞生了诸多优秀的开源 Web 框架,让我们的开发变得轻松.但同时也让我们不敢 ...
- [Python web开发] Web框架开发基础 (一)
Python WEB框架 WSGI,WEB Server Gateway Interface,可以看做是一种底层协议,它规定了服务器程序和应用程序各自实现上面接口.Python的实现称为wsgiref ...
- 六十一 Web开发 使用Web框架
由于用Python开发一个Web框架十分容易,所以Python有上百个开源的Web框架.这里我们先不讨论各种Web框架的优缺点,直接选择一个比较流行的Web框架——Flask来使用. 用Flask编写 ...
- python web应用--web框架(三)
了解了WSGI框架,我们发现:其实一个Web App,就是写一个WSGI的处理函数,针对每个HTTP请求进行响应. 但是如何处理HTTP请求不是问题,问题是如何处理100个不同的URL. 每一个URL ...
随机推荐
- spring web.xml 标签<param-name>contextConfigLocation</param-name>
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</lis ...
- Intouch/ifix语音报警系统制作(3-利用自定义过程和函数,重构先前版本)
在语音模块嵌入了半年左右的时间,经过实际使用发现,代码冗余,重复太多,维护较难,新增也不易,故而对整个框架进行整理,实现简单添加,维护容易的目的. 1.代码优化 1.1构建自定义过程 name 参数代 ...
- S7-200通过以太网模块,使用kepware与ifix建立通讯连接要点
在前阵子项目改造中,需要利用先前的S7-200 PLC与ifix进行通讯,故而,在做好上位机后,在现场实际测试了下.通过CP243-1以太网模块,顺利与KEPWARE建立连接,其中当然也有些要点要注意 ...
- phpmyadmin error:#2002 - 服务器没有响应 (或者本地 MySQL 服务器的套接字没有正确配置)
1. 将 "phpMyAdmin/libraries"文件夹下的config.default.php文件中的$cfg['Servers'][$i]['host'] = 'local ...
- couchdb(5984)未授权访问
启动环境 测试 poc地址 https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py map -p 5984 ...
- ffmpeg 任意文件读取漏洞/SSRF漏洞 (CVE-2016-1897/CVE-2016-1898)
影响版本 在FFMpeg2.X poc http://192.168.49.2:8000/?name={%25%20for%20c%20in%20[].__class__.__base__.__sub ...
- 串、KMP模式匹配算法
串是由0个或者多个字符组成的有限序列,又名叫字符串. 串的比较: 串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号. 计算机中常用的ASCII编码,由8位二进制 ...
- 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案
2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...
- Python开发篇——基于React-Dropzone开发上传组件
这次我要讲述的是在React-Flask框架上开发上传组件的技巧.我目前主要以React开发前端,在这个过程中认识到了许多有趣的前端UI框架--React-Bootstrap.Ant Design.M ...
- Java-Dubbo学习及整合SpringBoot
Dubbo架构 Dubbo是Java的RPC框架,具有三大核心功能:面向接口的远程方法调用,智能容错和负载均衡,以及服务的自动注册和发现 Dubbo架构图: 节点角色说明: 节点 说明 Provide ...