一文讲解谁才是最快的Web框架
对于Web应用开发者而言,关于不同Web框架之间性能差异的争议由来已久。对于一个网络应用或服务而言,我们通常都希望处理速度越快越好。但由于实现语言、底层网络设计、并发处理、路由算法等种种因素的影响,不同的框架实现相同的逻辑,性能可能会有十倍乃至百倍的差异。

究竟哪个Web框架才是最快的,能够在一定的时间和系统资源内,处理更多的请求?Web-Frameworks,这个项目或许能给出一些有价值的信息。
简介
Web-Frameworks,是the-benchmarker组织在Github上开源的Web框架性能测试比较工具和排行榜。项目使用:
Ruby:用于编写所有工具脚本
wrk:并发性能测试工具
PostgreSQL:测试结果存储的数据库
Docker:每个测试都使用Docker容器进行隔离
jq:处理Docker元数据
Web-Frameworks部署方便,且很容易扩展,可以添加自定义的框架和测试脚本,并提供了丰富的结果输出方式。
使用Web-Frameworks,可以测试在不同硬件环境下框架的性能表现,以及不同框架之间的比较,能够对框架选择和性能评估能提供参考。
使用
要安装Web-Frameworks,使用Ruby的依赖管理工具bundle安装
bundle install bundle exec rake config12复制代码类型:[javascript]
然后使用Make构建:
export FRAMEWORK=php/lumen cd ${FRAMEWORK} make -f .Makefile build123复制代码类型:[javascript]
最后,运行性能测试和数据收集脚本:
make -f ${FRAMEWORK}/.Makefile collect1复制代码类型:[javascript]
截至2021-03-16,Web-Frameworks提供了25种语言、226个Web框架的性能测试比较排行榜。测试运行环境为:
CPU:8核,AMDFX-8320E
内存:16GB
操作系统:Fedora
Docker:version20.10.0-rc1,build5cc2396
使用wrk进行并发性能测试,使用8线程,超时时间为8秒,测试持续15秒,分别在并发为64、256和512并发连接的情况下进行测试。按照64并发下最高qps进行排序,得到了如下的框架性能排名(截取前十名):

排名第一的,是Java框架ActiveJ,一个异步HTTP应用平台,以其高效的IO效率著称。其建立在高性能的事件循环和CSP之上,并提供了GC-友好的资源管理策略。在测试中,其达到了172615.83请求每秒的优越性能。
排名二、三的,是两个PHP框架,Webman和Workerman,其中Webman是基于Workerman的优化版本。而Workerman则是一个异步的、事件驱动的高性能PHPWeb应用框架,配有详尽的中文文档。
第四名则是一个Go框架Gearbox,这是一个用于构建微服务的、专注于高性能的Web框架。其基于另一个Go项目fasthttp,并使用了优化的基数树实现路由算法。
第五名是PHP框架mark,其同样基于排名第三的Workerman。第六到第八名,则是连续的三个Go框架:Fiber,Atreugo和Fasthttp,包括第十名的gorouter-fasthttp均是专注于性能的轻量级Web框架。第九名,则是有一门比较冷门的语言Nim实现的框架httpbeast,充分利用了Nim语言的高性能特性。
十一到二十名,则由4个Java框架、2个Javascript框架,和1个的Go、Clojure、Kotlin以及Kotlin框架组成。

截至2021-03-16,Web-Frameworks提供了全部25种语言、226个Web框架的性能排行榜,绝大多数常见的网络框架都在其中,如:
24名的Vertx,27名的Swoole,47名的Gin,62名的Beego,70名的Spring,155名的Express,191名的Django,209的RubyRails,223的Laravel,……
Web-Frameworks提供了简便的性能测试工具集,并覆盖率极为广泛的网络框架,提供了一个具有参考价值并发性能的排行榜,对于框架选择和性能评估有一定意义。
然而,该测试和排行榜仅仅基于数个简单接口的实现,缺乏更为深入的优化;只对每秒请求数这一指标进行了比较,缺乏包括延迟、并发稳定性、资源占用程度等等的评估,不能完全代表各个框架在实践中的真正性能表现。