سلام دوستان! امروز میخواهیم درباره یکی از ویژگیهای جدید و جذاب Flask 3.0 صحبت کنیم: بارگذاری تنبل یا همون lazy loading برای ویوها. داداش هیچ کدوم از فایلای ویویی که نیاز نداری، بارگذاری نمیشن 🙌. این موضوع خیلی خیلی توی بهینهسازی برنامهها کمک میکنه. شاید براتون سوال باشه که این قضیه اساساً چطور کار میکنه و چه اثراتی داره؟ خب پس همراه من باشید تا بررسیش کنیم.
در برنامههای سنتی، وقتی که سرور رو بالا میبریم، معمولاً تمام ویوها همون ابتدا بارگذاری میشن. فکرشو بکن چندین فایل و ماژول هم که شاید اصلاً تو همون لحظه نیازی بهشون نیست بارگذاری میشن. این کار نهتنها از نظر سرعت تاثیرگذار نیست بلکه حسابی حافظه میخوره. حالا اگه ما بتونیم هر ویو رو در هنگام نیاز بارگذاری کنیم، چیز خوبی میشه نه؟ این همون کاریه که lazy loading تو Flask برای ما انجام میده.
توی Flask 3.0، ما این قابلیت رو به راحتی و با چند خط کدنویسی میتوانیم پیاده کنیم. حالا نگاهی بندازیم ببینیم چطور میتونیم از این قابلیت استفاده کنیم و چه درست و درمانی براش بنویسیم.
روش پیادهسازی به این صورت که ابتدا تعریفی از ویو یا همون route مورد نظر مینویسیم و بعد با استفاده از یک تابع یا یک کلاس، در زمان فراخوانی آن، بارگذاری رو انجام میدهیم. سادگی این قضیه باعث میشه زمان توسعه و پشتیبانی از برنامه بشدت کاهش پیدا کنه.
نمونه کد و پیادهسازی
from flask import Flask
app = Flask(__name__)
def create_view():
@app.route("/lazy")
def lazy_view():
return 'This view is lazily loaded!'
# Calling the lazy view loader function only when the endpoint gets hit
if __name__ == "__main__":
app.add_url_rule('/lazy', view_func=create_view())
app.run()
توضیح خط به خط کدهای بالا
from flask import Flask
در اینجا ما میایم ابتدا flask رو ایمپورت میکنیم که بتونیم یه اپلیکیشن ساده بسازیم.
app = Flask(__name__)
اینجا یه شیء از کلاس Flask با مقدار __name__ میسازیم که بتونیم ازش توی کل برنامه استفاده کنیم.
def create_view():
یه تابع برای ایجاد و بازگشت ویو lazy تعریف میکنیم. این تابع وقتی فراخوانی میشه که URL مخصوص اون بازدید بشه.
@app.route("/lazy")
با استفاده از این دکوریتور، مسیری که این ویو قراره منتشر بشه رو مشخص میکنیم.
def lazy_view():
هر وقت که مسیر مربوطه باز شد، این تابع اجرا خواهد شد و محتوایی که میخواهیم برگردونیم رو مشخص میکنیم.
app.add_url_rule('/lazy', view_func=create_view())
با این خط ما اطمینان حاصل میکنیم که view زمانی اضافه میشه که مورد نیاز باشه.