跳到内容

基准测试

独立的 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,因此也不能比它更快。
    • FastAPI 在 Starlette 的基础上提供了更多功能。这些功能在构建 API 时几乎总是需要,例如数据验证和序列化。通过使用它,您可以免费获得自动文档(自动文档甚至不会增加运行应用程序的开销,它是在启动时生成的)。
    • 如果您不使用 FastAPI 而直接使用 Starlette(或另一个工具,如 Sanic、Flask、Responder 等),您将不得不自行实现所有数据验证和序列化。因此,您的最终应用程序仍然会与使用 FastAPI 构建的应用程序产生相同的开销。在许多情况下,这种数据验证和序列化是应用程序中编写代码量最大的部分。
    • 因此,通过使用 FastAPI,您可以节省开发时间、减少错误、减少代码行数,而且您可能会获得与不使用它(因为您将不得不自行在代码中实现所有功能)时相同(或更好)的性能。
    • 如果您正在比较 FastAPI,请将其与提供数据验证、序列化和文档的 Web 应用程序框架(或工具集)进行比较,例如 Flask-apispec、NestJS、Molten 等。这些框架集成了自动数据验证、序列化和文档功能。