این تکنولوژی که در زند فریم ورک ۲ استفاده شده است باعث افزایش بهره وری می شود. به طوری که بارگذاری اولیه یک شی یا کلاس را به تاخیر می اندازد تا زمانی که اولین بار این کلاس یا شی مورد استفاده قرار گیرد. به این معنی که اگر شما کلاسی را ایجاد کرده باشید تا زمانی که از این کلاس استفاده ای نکرده اید پردازشی روی آن انجام نمی گیرد.

نقطه مقابل این تکنولوژی eager loading است که کلاس های ایجاد شده به طور کامل آماده (پردازش) می شوند حتی اگر استفاده نشوند. در روش lazy loading امکان استفاده از چند مدل مختلف وجود دارد. که lazy initialization را بررسی خواهیم کرد (از این روش در زند فریم ورک ۲ استفاده میشود) :‌

lazy initialization :

در این روش ایجاد یک کلاس و یا پردازش متغیر ها یا متد های یک کلاس تا زمانی که برای اولین بار فراخوانی نشده اند به تاخیر می افتد. در واقع یک علامت برای اینکه آیا کلاس ایجاد شده است یا نه در نظر گرفته می شود و زمانی که برای اولین بار کلاس مورد استفاده قرار میگیرد این علامت (پرچم) بررسی می شود و اگر کلاس ایجاد نشده باشد در همان نقطه کلاس ایجاد شده و پردازش می شود. در زند فریم ورک ۲ در کنار استفاده از این روش همزمان از تکنولوژی دیگری با نام Factory Method Pattern استفاده میشود که در واقع یک کلاس واسط برای ایجاد کلاس های دیگر است. هر کلاس واسط از یک interface استفاده میکند و میتواند برای ایجاد مجموعه خاصی از کلاس ها استفاده شود. با ترکیب این دو تکنولوژی نمونه ای از هر کلاس در یک آرایه انجمنی(associative array – هر آرایه ای که یکی از کلید های آن از نوع رشته باشد) قرار میگیرد. به مثال زیر دقت کنید :‌

شما هم میتوانید از این روش در ایجاد کلاس ها  استفاده نمایید.

 

Virtual Proxy :

یک کلاس(proxy) مشابه کلاس اصلی است به همراه متد های مشابه اما به جای آنکه در کد اصلی, کلاس اصلی ایجاد شود یک کلاس از نوع proxy ایجاد می شود. با این شرایط برای تغییر برخی از ویژگی های یک متد نیازی نیست متد کلاس اصلی تغییر پیدا کند. فقط در کلاس proxy تغییر ایجاد میشود. در نهایت در کلاس proxy از کلاس اصلی استفاده میشود. این روش proxy pattern نامیده می شود.

Ghost

Value Holder

علاوه بر موارد گفته شده مفهومی با نام short circuit evaluation نیز وجود دارد که باعث افزایش سرعت پردازش می شود. در زبان php این قابلیت وجود دارد به عنوان مثال :

اگر A = false باشد فقط B پردازش می شود و اگر A و B برابر false باشند آنگاه C بررسی می شود.

اگر A = true باشد B و C بررسی و پردازش نخواهد شد.

در برخی زبان ها هر سه پردازش می شوند و سپس مقادیر مقایسه میشود اما در PHP اینطور نیست و باعث افزایش سرعت پردازش می شود.

در مثال زیر :‌

این روش تضمین میکند که تابع myfunc هرگز اجرا نخواهد شد.

محمد باقر رستمی

برنامه نویسی رو دوست دارم و از کارم و بیشتر از اون از یادگرفتن لذت می برم. دوست دارم از این طریق برای مردم دنیا مفید باشم. فارغ از رنگ، نژاد، ملیت و جنسیت.

Latest posts by محمد باقر رستمی (see all)

facebooktwittergoogle_pluslinkedin

2 نظر در رابطه با “زند فریم ورک ۲ – Lazy loading

  1. حسين دوست

    با سلام
    ممنون از مطالب بسیار جالبتون.
    فقط یه سؤال داشتم. آیا بهتر نیست تیتر این مقاله اتون “افزایش بهره وری در زند فریمورک” باشه؟ چون چیزی که من متوجه شدم، این بوده. اگه اشتباه میکنم، لطفاً راهنمائی کنید.
    باتشکر…

    پاسخ
    1. محمد باقر رستمی (نویسنده مطلب)

      سلام.
      نظر لطف شماست. مطالب اولیه آموزش زند رو ترجیح دادم با تکنولوژی هایی که در زند ۲ استفاده می شه شروع کنم. فارسیش مفهوم رو کامل نمی رسوند.

      پاسخ

دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

*