۱۶ اردیبهشت ۱۴۰۱

تفاوت اجرای Lazy و Eager

در این مطلب به شرح شیوه پیاده‌سازی و مقایسه‌ی اجرای lazy و eager برای تابعی مانند heavyCalculation که محاسبات سنگینی را انجام می‌دهد، می‌پردازیم.

پیاده‌سازی Eager Execution

function eager(data){
	const result = heavyCalculation(data);
	return function next() {
		return result;
	}
}

const calc = eager({...});
...
calc();

مزیت اجرای Eager در این است که محاسبات سنگین فقط یکبار زمان تعریف تابع calc انجام می‌شود و به عبارتی با کش کردن result مانع از انجام محاسبات سنگین زمان فراخوانی calc می‌شود. 

پیاده‌سازی Lazy Execution

function lazy(data){
	return function next() {
		return heavyCalculation(data);
	}
}

const calc = lazy({...});
...
calc();

در حالت اجرای Lazy زمان تعریف متد calc هیچ محاسباتی انجام نمی‌گیرد و با هر بار فراخوانی تابع calc محاسبات سنگین مجددا اجرا می‌شود که قسمت منفی این حالت است.

نکته مثبت اجرای Lazy برای حالاتی هست که اجرای متد calc وابسته به شرایطی باشد که امکان دارد هنگام اجرا متد calc فراخوانی نشود و بدین ترتیب هیچگاه عملیات سنگین اجرا نمی‌شود. در صورتی که در حالت eager در زمان تعریف calc تحت هر شرایطی یکبار متد heavyCalculation اجرا خواهد شد.

فهرست مطالب `Functional Programming`

نظرات خوانندگان این نوشته

تا به حال نظری ثبت نشد!

نظری در این مورد دارید؟ خوشحال می‌شم اون رو برام ارسال کنید.

captcha