این روزها بحث پرفورمنس یکی از داغترین مباحث دنیای نرم افزار و کدنویسی هست. زبون های مختلف ارائه میشن که این مفهوم رو ارتقاء بدن و زبون های قدیمی تر هم سعی میکنن خودشون رو اصطلاحا Level up کنن. در همین راستا php با ارایه ی جدیدترین نسخه ش یعنی 8.4 حرکت خفنی رو برای بهبود کارایی و پرفورمنس اپلیکیشن هایی که باهاش ساخته میشن زده. یه 2 دقیقه با من همراه شو ببینیم چی هست این جذابه لعنتی!
این آقای Lazy Objects به عنوان قابلیتی معرفی شده که مقداردهی اولیه یک شیء را تا زمانی که به اون دسترسی پیدا نشه، به تعویق میاندازه. این رویکرد بهویژه برای اشیایی که مقداردهی اولیه سنگین دارند، اما ممکن است همیشه در زمان اجرا موردنیاز نباشند، در مصرف منابع صرفهجویی میکنه. یعنی چی ؟ یعنی اینکه Initilize ی که داره توی construct یا همون سازنده ی کلاس خودمون اتفاق می افته, موقع تعریف کردن یه شیء از اون کلاس اتفاق نیفته. بیا مثال زیر رو ببین, یکم بیشتر برات جا می افته این عزیزدل.

توی مثال بالا چی شد؟
اما در Lazy Objects داستان شکل دیگه ای به خودش میگیره. مثال زیر رو ببین :

همونطور که توی مثال بالا میبینی , Lazy objects یه جورایی پراکسی طور برای به تأخیر انداختن اجرای سازنده (Constructor) شیء هدف وارد عمل میشه. اینکار رو هم با Reflection انجام میده، یعنی کلاس اصلی رو شبیه سازی میکنه و اجازه میده که شیء واقعی تا زمانی که نیاز به دسترسی نداشته باشه, مقداردهی اولیه نشه. انصافا خفنه.
قبلا فریمورک ها برای خودشون این فیچر رو پیاده سازی میکردن. مثلا لاراول Deferred میکنه سرویس هاش رو تا هر موقع بهشون نیاز باشه, اصطلاحا Fire بشن.
اما از الان به بعد این ویژگی جزو بدنه ی PHP هست و خلق الله میتونن توی پروژه های pure خودشون هم این رو پیاده سازی کنن و فریمورک ها هم لقمه رو نپیچونن دور کله ی خودشون. :D
و من الله توفیق...