跳转至

基准测试

第三方机构 TechEmpower 的基准测试表明使用 Uvicorn 的 FastAPI 应用是现有最快的 Python 框架之一,仅次于 Starlette 和 Uvicorn(FastAPI 内部的支持项)。

但在查看基准测试与对比时,需要注意以下几点:

基准测试与速度

基准测试经常把不同类型的工具放在一起比较。

具体来说,就是把 Uvicorn、Starlette、FastAPI (还有很多其他工具)放在一起比较。

一般来说,工具解决的问题越简单,性能就越好。但大多数基准测试不会测试工具提供的其他功能。

工具的层次划分如下:

  • Uvicorn:ASGI 服务器

    • Starlette:使用 Uvicorn 的 Web 微框架
      • FastAPI:使用 Starlette 的 API 微框架,支持构建 API、验证数据等多种功能
  • Uvicorn

    • 性能最好,除了服务器本身以外,没有什么其他功能
    • 不能直接使用 Uvicorn 编写应用。您的应用至少要包括 Starlette(或 FastAPI)的所有功能代码。如果真是这样,您最终的应用和使用框架开发的性能没什么区别,而且还要尽量压缩应用代码,避免 bug
    • Uvicorn 要和 Daphne、Hypercorn、uWSGI 等应用服务器放在一起评测
  • Starlette:
    • 性能仅次于 Uvicorn。Starlette 基于 Uvicorn 运行,因为要执行更多代码,只会比 Uvicorn
    • 但它提供了构建简单 Web 应用的工具,还有基于路径的路由等功能
    • Starlette 要和 Sanic、Flask、Django 等 Web 框架(或微框架)放在一起评测
  • FastAPI:
    • Starlette 不会比 Uvicorn 快,同理,基于 Starlette 的 FastAPI 也不可能比 Starlette 快;
    • FastAPI 比 Starlette 的功能更多。基本上都是在构建 API 时所需的功能,比如数据验证和序列化。FastAPI 还提供了 API 文档(API 文档在启动时生成的,不会给运行应用添加更多负担)
    • 不使用 FastAPI,直接使用 Starlette (或 Sanic、Flask、Responder 等工具)开发应用也要自行实现数据验证、序列化等功能。因此,最终的应用和使用 FastAPI 的性能没什么区别。但很多时候,数据验证与序列化占整个应用代码的比例很大
    • 使用 FastAPI 能节约开发时间,减少 bug,让您少写很多代码,还能获得与自行开发的应用相同甚至更佳的性能(因为您要自己写代码实现所有功能)
    • FastAPI 要与 Flask-apispec、NestJS、Molten 等提供数据验证、序列化和文档功能的 Web 应用框架(或工具组)放在一起评测