You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何末尾斜杠在wrk基准测试中对FastAPI接口性能影响巨大?

问题分析与解答

核心原因:重定向请求未执行业务逻辑

你看到的10倍性能差本质是两种请求的处理路径完全不同:

  • 请求/heros(无末尾斜杠):直接命中定义的路由,完整执行了heroes函数内的逻辑——包括创建SQLAlchemy Session、执行数据库查询,这部分IO操作是性能瓶颈,导致延迟高、QPS低。
  • 请求/heros/(带末尾斜杠):FastAPI会返回307 Temporary Redirect重定向到/heros,但wrk默认不会自动跟随重定向,所以这个请求只走到了FastAPI的路由匹配阶段,完全没碰数据库操作,直接返回重定向响应,因此延迟极低、QPS极高。

验证方法

1. 查看应用日志

把启动命令的--log-level critical改成--log-level info后重新启动:

uvicorn --host 0.0.0.0 --port 8000 --log-level info _fastapi:app

此时会看到:

  • 请求/heros时,会输出函数执行、数据库连接相关的日志
  • 请求/heros/时,只会输出重定向的日志,没有数据库操作记录

2. 用curl直接测试

# 不带斜杠:返回业务逻辑生成的空字典
curl -v http://127.0.0.1:8000/heros

# 带斜杠:返回307重定向响应
curl -v http://127.0.0.1:8000/heros/

解决建议

如果想消除这种路径差异带来的测试误导,有两种常用方式:

  • 同时定义两种路由:让带/不带斜杠的请求都走相同的业务逻辑
@app.get("/heros")
@app.get("/heros/")
def heroes():
    with Session(engine) as session:
        session.execute(text("SELECT * FROM hero;"))
        return {}
  • 关闭自动重定向:让带斜杠的请求直接返回404,避免混淆
app = FastAPI(redirect_slashes=False)

内容的提问来源于stack exchange,提问作者Dante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:22:45