开源的 Web 框架哪个快?我在 GitHub 找到了答案

开源
在开源这片自由的土地上,孕育了太多开源 Web 框架。我在 GitHub 上搜了一下“web framework”关键字显示有 56000+ 匹配的开源项目,它们百花齐放各有特色,覆盖多种语言。

[[422513]]

本文转载自微信公众号「HelloGitHub」,作者HelloGitHub。转载本文请联系HelloGitHub公众号。

在开源这片自由的土地上,孕育了太多开源 Web 框架。我在 GitHub 上搜了一下“web framework”关键字显示有 56000+ 匹配的开源项目,它们百花齐放各有特色,覆盖多种语言。

相信做过 Web 开发的程序员,都能说出好几个 Web 框架,如数家珍般地说出它们的好。比如我用过的 Python Web 框架有:Django、Tornado、Flask、FastAPI。这些 Web 框架各有特色:

  • Django 的大而全
  • Flask 的微小上手快
  • 专门开发接口的 FastAPI

不同的 Web 框架,在应对不同场景和需求时各有千秋,所以很难片面的说那个 Web 框架就是最好的,但如果单从速度方面比较的话,还是可以比出个高低的! 今天介绍的开源项目,就试图找出最快的开源 Web 框架。

项目地址:https://github.com/the-benchmarker/web-frameworks

介绍

web-frameworks 定时发布多种开源 Web 框架性能测试报告的项目,告诉你谁是最快的 Web 框架!

它采用 Ruby 语言编写,首先通过 Docker 启动待压测的 Web 框架,启动后通过 wrk 压测服务,最后把测试报告发布到网站上,结果支持搜索和排序功能,整个过程完全自动化。

具体的测试参数和机器配置:

wrk:HTTP 基准测试工具,支持压测和输出测试报告。

wrk 的相关参数:8 线程(-t),压 15 秒(-d),分别采用并发(-c) 64、256、512 模式压测了三次。我在本机用 wrk 对掘金网站做了压测,用来讲解报告的相关数据。

  1. 命令: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

https://github.com/nickel-org/nickel.rs

一个受 Express.js 启发的 Rust Web 框架。示例代码:

  1. #[macro_use] extern crate nickel; 
  2.  
  3. use nickel::{Nickel, HttpRouter}; 
  4.  
  5. fn main() { 
  6.     let mut server = Nickel::new(); 
  7.     server.get("**", middleware!("Hello World")); 
  8.     server.listen("127.0.0.1:6767"); 

2、iron

Star 数:5.9k|语言:Rust

https://github.com/iron/iron

示例代码:

  1. extern crate iron; 
  2. extern crate time
  3.  
  4. use iron::prelude::*; 
  5. use iron::{typemap, AfterMiddleware, BeforeMiddleware}; 
  6. use time::precise_time_ns; 
  7.  
  8. struct ResponseTime; 
  9.  
  10. impl typemap::Key for ResponseTime { type Value = u64; } 
  11.  
  12. impl BeforeMiddleware for ResponseTime { 
  13.     fn before(&self, req: &mut Request) -> IronResult<()> { 
  14.         req.extensions.insert::<ResponseTime>(precise_time_ns()); 
  15.         Ok(()) 
  16.     } 
  17.  
  18. impl AfterMiddleware for ResponseTime { 
  19.     fn after(&self, req: &mut Request, res: Response) -> IronResult<Response> { 
  20.         let delta = precise_time_ns() - *req.extensions.get::<ResponseTime>().unwrap(); 
  21.         println!("Request took: {} ms", (delta as f64) / 1000000.0); 
  22.         Ok(res) 
  23.     } 
  24.  
  25. fn hello_world(_: &mut Request) -> IronResult<Response> { 
  26.     Ok(Response::with((iron::StatusCode::OK, "Hello World"))) 
  27.  
  28. fn main() { 
  29.     let mut chain = Chain::new(hello_world); 
  30.     chain.link_before(ResponseTime); 
  31.     chain.link_after(ResponseTime); 
  32.     Iron::new(chain).http("localhost:3000"); 

由于篇幅问题,这里仅介绍报告中前 2 名的框架。

最能扛的框架

web-frameworks 测出来的平均每秒处理请求数,从高到低排序:

1、activej

Star 数:286|语言:Java

https://github.com/activej/activej

适用于 Web、高负载和微服务的 Java 框架。示例代码:

  1. class Main extends HttpServerLauncher { 
  2.   @Provides 
  3.   AsyncServlet servlet() { 
  4.     return request -> HttpResponse.ok200() 
  5.       .withPlainText("Hello World"); 
  6.   } 
  7.    
  8.   public static void main(String[] args) throws Exception { 
  9.     Launcher launcher = new HttpHelloWorldExample(); 
  10.     launcher.launch(args); 
  11.   } 

2、httpbeast

Star 数:239|语言:Nim

https://github.com/dom96/httpbeast

示例代码:

  1. import options, asyncdispatch 
  2.  
  3. import httpbeast 
  4.  
  5. proc onRequest(req: Request): Future[void] = 
  6.   if req.httpMethod == some(HttpGet): 
  7.     case req.path.get() 
  8.     of "/"
  9.       req.send("Hello World"
  10.     else
  11.       req.send(Http404) 
  12.  
  13. run(onRequest) 

由于篇幅问题,这里仅介绍报告中前 2 名的框架。

感受

看完这份 Web 框架测试报告,我发现 Rust 写的 Web 框架在不同的性能指标的测试结果中都名列前茅,看来 Rust 在性能方面真的是名不虚传。

当然性能不是评判一个 Web 框架的唯一标准,今天写这个项目也是希望可以给大家在选择 Web 的时候提供一个参考。而且报告中有冷门但具有特点的 Web 框架,可作为玩具项目玩一玩,如果哪天突然火起来的时候,你可能已经抢占先机、轻车熟路了。

最后,web-frameworks 的测试结果共包含 237 个 Web 框架,虽然不多但是这个数字还在不断增加...而且 issues 里还有很多 Web 框架申请“出战”,开源社区的力量正在让这个项目越来越好,看到这里我就放心了。

 

以上就是本文的全部内容,希望通过这个开源项目可以让你找到最快、最能扛的 Web 框架,性能上快人一步。

 

责任编辑:武晓燕 来源: HelloGitHub
相关推荐

2021-06-03 10:34:43

GitHub停车系统项目

2020-03-02 19:51:40

戴尔

2020-07-17 11:30:39

密钥Github数据安全

2021-03-23 18:01:14

SQL数据库前端

2021-05-17 10:32:10

命令行工具GitHub代码

2019-06-11 12:29:57

Android框架开源

2020-12-08 10:33:56

DDoS攻击开源安全安全工具

2021-02-04 11:11:08

开发技能工具

2021-02-04 11:46:49

GithubSQL工具Franchise

2019-07-10 10:55:32

DeepNudeGitHub软件

2021-03-27 10:47:11

数据泄露攻击信息安全

2022-09-20 10:41:32

接口优化网络

2020-01-07 14:44:09

GitHub代码开发者

2018-07-24 08:21:35

2017-07-28 09:00:59

2013-04-11 09:44:35

CSSGithub

2011-08-17 10:29:41

金山快盘、WEB QQ

2023-05-06 18:37:43

2023-11-07 14:58:26

2015-02-03 02:43:57

点赞
收藏

51CTO技术栈公众号