效能基準測試¶
獨立的 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 時幾乎總是需要的功能,例如資料驗證和序列化。透過使用它,您可以免費獲得自動生成的 API 文件(自動生成的文件甚至不會增加運行應用程式的開銷,它是在啟動時生成的)。
- 如果您不使用 FastAPI 而直接使用 Starlette(或其他工具,例如 Sanic、Flask、Responder 等),您就必須自己實現所有資料驗證和序列化。因此,您的最終應用程式仍將與使用 FastAPI 構建的應用程式具有相同的開銷。而且在許多情況下,這種資料驗證和序列化是應用程式中編寫的最大量的程式碼。
- 因此,透過使用 FastAPI,您可以節省開發時間、減少錯誤、減少程式碼行數,並且您可能會獲得與不使用它時相同的效能(或更好)(因為您必須在程式碼中實現所有這些功能)。
- 如果您要比較 FastAPI,請將其與提供資料驗證、序列化和文件功能的 Web 應用程式框架(或工具集)進行比較,例如 Flask-apispec、NestJS、Molten 等。具有整合自動資料驗證、序列化和文件功能的框架。