مكتبة الأكواد
JAVASCRIPT

Memoization Decorator - تحسين الأداء

ديكوراتور ذكي لحفظ نتائج الدوال المكلفة. يقلل وقت التنفيذ من O(2^n) إلى O(n) للدوال المتكررة.

JAVASCRIPT
function memoize(fn, keyGenerator = null) {
    const cache = new Map();

    return function(...args) {
        const key = keyGenerator
            ? keyGenerator(...args)
            : JSON.stringify(args);

        if (cache.has(key)) {
            return cache.get(key);
        }

        const result = fn.apply(this, args);
        cache.set(key, result);
        return result;
    };
}

// Advanced: WeakMap for automatic garbage collection
function memoizeWeak(fn) {
    const cache = new WeakMap();

    return function(obj, ...args) {
        if (!cache.has(obj)) {
            cache.set(obj, new Map());
        }

        const objCache = cache.get(obj);
        const key = JSON.stringify(args);

        if (objCache.has(key)) {
            return objCache.get(key);
        }

        const result = fn.apply(this, [obj, ...args]);
        objCache.set(key, result);
        return result;
    };
}

// Example: Fibonacci with memoization
const fibonacci = memoize(function(n) {
    if (n <= 1) return n;
    return fibonacci(n - 1) + fibonacci(n - 2);
});

// Usage
console.log(fibonacci(50)); // Instant result instead of minutes

💡 مثال الاستخدام

استخدم Memoization لتحسين أداء الدوال المتكررة، حسابات معقدة، أو استدعاءات APIs.

استخدام حر

هذا الكود متاح للاستخدام الحر. إذا كان لديك أسئلة أو تحتاج مساعدة، لا تتردد في التواصل معي.