committed by
GitHub
1 changed files with 35 additions and 0 deletions
@ -0,0 +1,35 @@ |
|||
# بنچمارک ها |
|||
|
|||
بنچمارک های موسسه TechEmpower نشان می دهد که برنامه های **FastAPI** که در حال اجرا تحت Uvicorn هستند ،<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"> یکی از سریع ترین فریمورک های موجود پایتون است </a> و تنها پایین تر از Starlette و خود Uvicorn (که توسط خود FastAPI در درون استفاده می شود) قرار دارد. |
|||
|
|||
اما هنگام بررسی کردن بنچمارکها و مقایسهها، باید به موارد زیر توجه داشته باشید. |
|||
|
|||
## بنچمارک و سرعت |
|||
|
|||
هنگام بررسی بنچمارکها، معمولاً مشاهده میشود که چندین ابزار از نوعهای مختلف با یکدیگر مقایسه شدهاند. |
|||
|
|||
به طور خاص، مقایسه بین Uvicorn، Starlette و FastAPI را با یکدیگر مشاهده (بین بسیاری از ابزارهای دیگر رایج است) میکنید. |
|||
|
|||
هر چه مسئلهای که توسط ابزار حل شود سادهتر باشد، عملکرد بهتری خواهد داشت. و بیشتر بنچمارکها ویژگیهای اضافی ارائه شده توسط ابزار را آزمایش نمیکنند. |
|||
|
|||
سلسله مراتب به این شکل است: |
|||
|
|||
* **Uvicorn**:یک سرور ASGI |
|||
* **Starlette**: (استفاده میکند از Uvicorn) یک وب میکرو فریم ورک |
|||
* **FastAPI** (استفاده میکند از Starlette ) یک میکرو فریمورک API با ویژگیهای بیشتر برای ساختن API ها است، با اعتبارسنجی دادهها و غیره. |
|||
|
|||
* **Uvicorn**: |
|||
* این سرور بهترین عملکرد را دارد زیرا به جز سرور خودش، کد اضافی کمتری دارد. |
|||
* شما نباید به طور مستقیم یک برنامه را در Uvicorn ایجاد کنید.این بدان معناست که کد شما باید کم و بیش شامل تمام کدهای ارائه شده توسط Starlette (یا **FastAPI**) باشد. و اگر این کار را انجام دهید، برنامه نهایی شما همان هزینه اضافی را خواهد داشت که از یک فریم ورک استفاده کرده باشید و کد برنامه و باگهای خود را به کمترین حالت ممکن رسانده باشید. |
|||
* اگر قصد مقایسه Uvicorn را دارید، باید آن را با سایر سرورهای برنامهای مانند Daphne، Hypercorn، uWSGI و غیره مقایسه کنید. |
|||
|
|||
* **Starlette**: |
|||
* بعد از Uvicorn، بهترین عملکرد را خواهد داشت. در واقع، Starlette از Uvicorn برای اجرا استفاده میکند. بنابراین، احتمالاً تنها با اجرای کد بیشتر، تنها "کندتر" از Uvicorn خواهد بود. |
|||
* اما ابزارهایی را برای ساختن برنامه های کاربردی وب ساده با routing(مسیریابی) و بر اساس مسیرها (paths) و غیره در اختیار شما قرار می دهد. |
|||
* اگر میخواهید Starlette را مقایسه کنید آن را با framework های وب Sanic، Flask، Django و... مقایسه کنید(یا microframeworks). |
|||
* **FastAPI**: |
|||
* همانطور که Starlette از Uvicorn استفاده می کند و نمی تواند سریعتر از آن باشد، **FastAPI** از Starlette استفاده می کند، بنابراین نمی تواند سریعتر از آن باشد. |
|||
* FastAPI ویژگی های بیشتری از Starlette را فراهم میکند مانند اعتبارسنجی دادهها و سریالسازی که تقریبا همیشه هنگام ساختن API به آن نیاز دارید. و با استفاده از آن، اسناد خودکار را ایجاد می کند(مستندات خودکار حتی به برنامه های در حال اجرا باری اضافه نمی کند و در هنگام راه اندازی ایجاد می شود). |
|||
* اگر از FastAPI استفاده نمی کنید و مستقیم از Starlette (یا هر ابزار دیگری مانند Sanic، Flask، Responder و...) استفاده می کنید، باید تمام اعتبار سنجی و سریال سازی داده ها را خودتان پیاده سازی کنید.بنابراین برنامه نهایی شما همچنان همان هزینههای اضافی را دارد که اگر با FastAPI ساخته شده باشد.و در بسیاری از موارد، این اعتبارسنجی داده ها و سریال سازی، بیشترین مقدار کد نوشته شده در برنامه ها است. |
|||
* بنابراین با استفاده از FastAPI، شما در زمان توسعه، باگها، تعداد خطوط کد و همچنین عملکردی که ممکن است بدست نیاید، صرفهجویی میکنید. |
|||
* اگر FastAPI را مقایسه میکنید، آن را با framework کاربردی وب (یا مجموعهای از ابزارها) مقایسه کنید که اعتبار داده، سریالسازی و مستندسازی را ارائه میکند، مانند Flask-apispec، NestJS، Molten، و غیره.framework هایی با اعتبارسنجی خودکار دادهها، سریالسازی و مستندسازی. |
Loading…
Reference in new issue