独立的TechEmpower基准测试显示,
在Uvicorn下运行的
FastAPI
应用程序是
可用的最快的Python框架之一
,仅在Starlette和Uvicorn本身(由FastAPI内部使用)之后运行。
(*)
但是,在检查基准和比较时,请注意以下几点。
基准和速度
当您检查基准测试时,通常会看到几种不同类型的工具被视为等效工具。
具体来说,是将Uvicorn,Starlette和FastAPI进行比较(在许多其他工具中)。
该工具解决的问题最简单,它将获得更好的性能。
而且大多数基准测试并未测试该工具提供的其他功能。
层次结构如下:
-
Uvicorn
:ASGI服务器
-
Starlette
:(使用Uvicorn)网络微框架
-
FastAPI
:(使用Starlette)具有多个附加功能的API微框架,用于构建API,进行数据验证等。
-
Uvicorn
:
-
将具有最佳性能,因为除了服务器本身外,它没有太多额外的代码。
-
您不会直接在Uvicorn中编写应用程序。
这意味着您的代码至少必须包含Starlette(或
FastAPI
)
提供的所有代码
。
而且,如果您这样做了,最终的应用程序将与使用框架并最大程度地减少应用程序代码和错误的开销相同。
-
如果要比较Uvicorn,请将其与Daphne,Hypercorn,uWSGI等进行比较。
-
星际
:
-
在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等。具有集成的自动数据验证,序列化和文档编制的框架。