基准测试¶
独立的 TechEmpower 基准测试显示,在 Uvicorn 下运行的 FastAPI 应用程序是现有的最快的 Python 框架之一,仅次于 Starlette 和 Uvicorn 本身(FastAPI 内部使用)。
但在查看基准测试和比较时,您应该记住以下几点。
基准测试和速度¶
当您查看基准测试时,经常会看到几种不同类型的工具被视为等效进行比较。
特别是,Uvicorn、Starlette 和 FastAPI(以及许多其他工具)会一起进行比较。
工具解决的问题越简单,性能就越好。大多数基准测试都没有测试工具提供的额外功能。
层级结构如下:
-
Uvicorn:一个 ASGI 服务器
- Starlette:(使用 Uvicorn)一个 Web 微框架
- FastAPI:(使用 Starlette)一个 API 微框架,具有构建 API 的多项额外功能,包括数据验证等。
- Starlette:(使用 Uvicorn)一个 Web 微框架
-
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 等。具有集成自动数据验证、序列化和文档的框架。