跳转至

基准测试

独立的 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 等。即具有集成自动数据验证、序列化和文档功能的框架。