基准测试¶
独立的技术力量基准测试显示,在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等。具有集成自动数据验证、序列化和文档的框架。