Profiling
ساده ترین راه های بهبود سرعت و مصرف منابع را بررسی کردیم ولی در واقعیت بهترین راه بهبود سرعت و مصرف منابع درست نوشتن برنامه است. به 3 راه زیر برای انجام عملیات جمع یک فیلد از یک مدل روی دیتابیس در فریم ورک جنگو دقت کنید. اولی پر هزینه ترین و سومی بهینه ترین است:
from .models import Financial
# 1. getting all fields
a = 0
financial = Financial.objects.all()
for item in financial:
a += item.balance
# 2. getting related fields only
a = 0
financial = Financial.objects.values_list("balance")
for item in financial:
a += item.balance
# 3. using aggregation
from django.db.models import Sum
a = Financial.objects.aggregate(Sum("balance", default=0))
بهینه تر نوشتن کدها و برنامه ها حاصل دانش و تجربه است و قرار نیست یک شبه بتوانید هر برنامه را به بهینه ترین حالت ممکن بنویسید.
ضمنا راه مشخصی برای نوشتن کدهای سریع تر وجود ندارد و اگر وجود داشت در مورد آن صحبت میکردیم!
همچنین سرعت همیشه تنها هدف ما نیست و گاهی فقط میخواهید تا مصرف منابع را کاهش دهید تا بتوانید تعداد پردازش های همزمان را بیشتر کنید(مثل استفاده از وب سرور).
بهبود performance یک فرآیند علمی است! در این فرایند باید:
- رفتار برنامه را مشاهده کنید
- ببینید که چگونه میتوانید بخشی از رفتار برنامه را بهبود ببخشید
- تغییرات را اعمال کنید
- مجددا این کار را از مرحله ی 1 تکرار کنید
برای انجام این مراحل یک ابزار خوب از کتابخانه ی استاندارد به نام cProfile وجود دارد.
ماژول cProfile عملیات ساخت و اجرای یک profile از کد ما را انجام میدهد. در این profile اطلاعات مربوط به زمان و مصرف منابع کد قابل مشاهده است.
در مثال بعدی با استفاده از cProfile یک تابع را 4 بار نوشته و با یکدیگر مقایسه میکنیم.