跳到内容

基准测试

独立的 TechEmpower 基准测试表明,在 Uvicorn 下运行的 **FastAPI** 应用程序是 最快的 Python 框架之一,仅次于 Starlette 和 Uvicorn 本身(FastAPI 内部使用)。

但在查看基准测试和比较时,您应该记住以下几点。

基准测试和速度

查看基准测试时,经常会将不同类型的多个工具进行同等比较。

特别是,会看到 Uvicorn、Starlette 和 FastAPI 一起进行比较(以及许多其他工具)。

工具解决的问题越简单,性能就越好。大多数基准测试并没有测试该工具提供的附加功能。

层级结构如下:

  • Uvicorn:一个 ASGI 服务器

    • Starlette:(使用 Uvicorn)一个 Web 微框架
      • FastAPI:(使用 Starlette)一个 API 微框架,具有构建 API 的多项附加功能,例如数据验证等。
  • Uvicorn:

    • 性能最好,因为它除了服务器本身之外没有太多额外的代码。
    • 您不会直接在 Uvicorn 中编写应用程序。这意味着您的代码至少需要包含 Starlette(或 **FastAPI**)提供的所有代码。如果您这样做,您的最终应用程序将具有与使用框架并最小化您的应用程序代码和错误相同的开销。
    • 如果您要比较 Uvicorn,请将其与 Daphne、Hypercorn、uWSGI 等应用程序服务器进行比较。
  • Starlette:
    • 在 Uvicorn 之后,性能位居第二。事实上,Starlette 使用 Uvicorn 来运行。所以,它可能只比 Uvicorn "慢" 在需要执行更多代码。
    • 但它为您提供了构建简单 Web 应用程序的工具,例如基于路径的路由等。
    • 如果您要比较 Starlette,请将其与 Sanic、Flask、Django 等 Web 框架(或微框架)进行比较。
  • FastAPI:
    • Starlette 使用 Uvicorn 并且不可能比它更快,同样,**FastAPI** 使用 Starlette,所以它也不可能比 Starlette 更快。
    • FastAPI 在 Starlette 的基础上提供了更多功能。这些功能在构建 API 时几乎总是需要的,例如数据验证和序列化。通过使用它,您可以免费获得自动文档(自动文档甚至不会增加运行应用程序的开销,它是在启动时生成的)。
    • 如果您不使用 FastAPI 而直接使用 Starlette(或其他工具,如 Sanic、Flask、Responder 等),您将不得不自己实现所有数据验证和序列化。因此,您的最终应用程序仍然会与使用 FastAPI 构建的应用程序具有相同的开销。在许多情况下,这些数据验证和序列化是应用程序中编写最多的代码。
    • 因此,通过使用 FastAPI,您可以节省开发时间、减少错误、减少代码行数,并且您可能会获得与不使用它时相同的性能(甚至更好)(因为您将不得不在代码中实现所有这些功能)。
    • 如果您要比较 FastAPI,请将其与提供数据验证、序列化和文档的 Web 应用程序框架(或工具集)进行比较,例如 Flask-apispec、NestJS、Molten 等。具有集成自动数据验证、序列化和文档的框架。