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