در این مطلب به شرح شیوه پیادهسازی و مقایسهی اجرای 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
اجرا خواهد شد.