update docs\zh-hant\benchmarks.md

This commit is contained in:
KNChiu 2024-04-24 23:09:39 +08:00
parent 38929aae1b
commit c8a0410fde
1 changed files with 34 additions and 0 deletions

View File

@ -0,0 +1,34 @@
# 基準測試
由第三方機構 TechEmpower 的基準測試表明在 Uvicorn 下運行的 **FastAPI** 應用程式是 <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">可用的最快 Python 框架之一</a>,僅次於 Starlette 和 Uvicorn 本身 (由 FastAPI 內部使用)。
但是在查看基準得分和對比時,請注意以下幾點。
## 基準測試和速度
當你查看基準測試時,時常會見到幾個不同類型的工具被同時進行測試。
具體來說,是將 UvicornStarlette 和 FastAPI 同時進行比較(以及許多其他工具)。
該工具解決的問題越簡單,其效能就越好。而且大多數基準測試不會測試該工具提供的附加功能。
層次結構如下:
* **Uvicorn**ASGI 伺服器
* **Starlette**:(使用 Uvicorn一個網頁微框架
* **FastAPI**:(使用 Starlette使用 Starlette一個 API 微框架,具有用於建立 API 的多個附加功能、資料驗證等。
* **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 可以幫助您自動產生 API文檔應用程式啟動時將會自動生成文件所以不會增加應用程式運行時的開銷
* 如果您沒有使用 FastAPI 而是直接使用 Starlette或其他工具如 Sanic、Flask、Responder 等),您將必須自行實現所有資料驗證和序列化。因此,您的最終應用程式仍然具有與使用 FastAPI 建置相同的開銷。在許多情況下,這種資料驗證和序列化是應用程式中編寫最大量的程式碼。
* 因此透過使用 FastAPI您可以節省開發時間、錯誤與程式碼數量並且相比不使用 FastAPI 您很大可能會獲得相同或更好的性能(因為那樣您必須在程式碼中實現所有相同的功能)。
* 如果您要與FastAPI比較請將其與能夠提供資料驗證、序列化和文件的Web 應用程式框架或工具集進行比較例如Flask-apispec、NestJS、Molten 等框架。