网站首页 > 技术文章 正文
对于 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 config
然后使用 Make 构建:
export FRAMEWORK=php/lumen
cd ${FRAMEWORK}
make -f .Makefile build
最后,运行性能测试和数据收集脚本:
make -f ${FRAMEWORK}/.Makefile collect
截至 2021-03-16,Web-Frameworks 提供了 25 种语言、226 个 Web 框架的性能测试比较排行榜。测试运行环境为:
- CPU:8 核,AMD FX-8320E
- 内存:16 GB
- 操作系统:Fedora
- Docker:version 20.10.0-rc1, build 5cc2396
使用 wrk 进行并发性能测试,使用 8 线程,超时时间为 8 秒,测试持续 15 秒,分别在并发为 64、256 和 512 并发连接的情况下进行测试。按照 64 并发下最高 qps 进行排序,得到了如下的框架性能排名(截取前十名):
排名第一的,是 Java 框架 ActiveJ,一个异步 HTTP 应用平台,以其高效的 IO 效率著称。其建立在高性能的事件循环和 CSP 之上,并提供了GC-友好的资源管理策略。在测试中,其达到了 172615.83 请求每秒的优越性能。
排名二、三的,是两个 PHP 框架,Webman 和 Workerman,其中 Webman 是基于 Workerman 的优化版本。而 Workerman 则是一个异步的、事件驱动的高性能 PHP Web 应用框架,配有详尽的中文文档。
第四名则是一个 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 的 Ruby Rails,223 的 Laravel,……
结论
Web-Frameworks 提供了简便的性能测试工具集,并覆盖率极为广泛的网络框架,提供了一个具有参考价值并发性能的排行榜,对于框架选择和性能评估有一定意义。
然而,该测试和排行榜仅仅基于数个简单接口的实现,缺乏更为深入的优化;只对每秒请求数这一指标进行了比较,缺乏包括延迟、并发稳定性、资源占用程度等等的评估,不能完全代表各个框架在实践中的真正性能表现。
猜你喜欢
- 2024-10-12 41、php多进程基本用法 php多进程编程
- 2024-10-12 使用 Workman 做一个聊天室 wordpress聊天室插件
- 2024-10-12 21、php面向对象例子-类声明与创建
- 2024-10-12 Casbin实战大揭秘:教育培训领域的创新实践和高效优化策略
- 2024-10-12 go 和 php 性能如何进行对比? go跟php
- 2024-10-12 27、php面向对象例子-接口类 php 面向对象
- 2024-10-12 54、php利用信号实现父子进程间通信
- 2024-10-12 24、php面向对象例子-static关键字
- 2024-10-12 分享一个不错的PHP统计监控系统,值得试一下
- 2024-10-12 2020年PHP开发程序员还有希望吗? php程序员发展方向
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)