>  기사  >  웹 프론트엔드  >  JavaScript에서의 Memoization 사용법 소개(코드)

JavaScript에서의 Memoization 사용법 소개(코드)

不言
不言앞으로
2018-10-17 16:48:052635검색

이 글은 JavaScript(코드)에서의 메모이제이션 사용법을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

memoization은 라틴어 memorandum("기억하다")에서 유래되었으며, 암기와 혼동하지 마세요.

먼저 Wikipedia의 설명을 살펴보겠습니다.

컴퓨팅에서 메모이제이션은 비용이 많이 드는 함수 호출의 결과를 저장하고 동일한 입력이 발생할 때 캐시된 결과를 반환함으로써 컴퓨터 프로그램 속도를 높이는 데 주로 사용되는 최적화 기술입니다.

간단히 말해서, 메모이제이션은 비용이 많이 드는 함수 호출의 결과를 저장하고 동일한 입력이 다시 발생할 때 캐시된 결과를 반환함으로써 컴퓨터 프로그램 속도를 높이는 데 주로 사용되는 최적화 기술입니다.

이 글에서는 먼저 메모이제이션 최적화 기술을 활용한 간단한 예시를 소개한 후 밑줄에 메모이제이션을 활용한 소스코드를 해석하고 라이브러리를 다시 선택해 이해를 깊게 했습니다. ㅋㅋㅋ 함께 :

const factorial = n => {
    if (n === 1) {
        return 1
    } else {
        return factorial(n - 1) * n
    }
};

계속 변환하는 방법이 가장 일반적인 형태입니다.

const cache = []
const factorial = n => {
    if (n === 1) {
        return 1
    } else if (cache[n - 1]) {
        return cache[n - 1]
    } else {
        let result = factorial(n - 1) * n
        cache[n - 1] = result
        return result
    }
};

이 팩토리얼의 예를 통해 메모이제이션은 실행 결과를 저장하는 방식이라는 것을 알 수 있습니다. 다음에 동일한 입력이 발생하면 결과가 바로 출력되므로 실행 속도가 향상됩니다. .

소스코드에 밑줄 메모

const factorialMemo = () => {
    const cache = []
    const factorial = n => {
        if (n === 1) {
            return 1
        } else if (cache[n - 1]) {
            console.log(`get factorial(${n}) from cache...`)
            return cache[n - 1]
        } else {
            let result = factorial(n - 1) * n
            cache[n - 1] = result
            return result
        }
    }
    return factorial
};
const factorial = factorialMemo();
코드가 한눈에 깔끔합니다. _.memoize를 사용하여 다음과 같이 계승을 구현합니다.

const factorialMemo = func => {
    const cache = []
    return function(n) {
        if (cache[n - 1]) {
            console.log(`get factorial(${n}) from cache...`)
            return cache[n - 1]
        } else {
            const result = func.apply(null, arguments)
            cache[n - 1] = result
            return result
        }
    }
}

const factorial = factorialMemo(function(n) {
    return n === 1 ? 1 : factorial(n - 1) * n
});

이 소스코드를 참고하면 위의 계승은 다음과 같이 계속해서 변형될 수 있습니다. :

// Memoize an expensive function by storing its results.
_.memoize = function(func, hasher) {
    var memoize = function(key) {
        var cache = memoize.cache;
        var address = '' + (hasher ? hasher.apply(this, arguments) : key);
        if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
        return cache[address];
    };
    memoize.cache = {};
    return memoize;
};

소스 코드에서 메모이제이션을 다시 선택하세요

const factorial = _.memoize(function(n) {
    return n === 1 ? 1 : factorial(n - 1) * n
});

소스 코드를 보면 lastArgs가 인수와 동일하면 func가 실행되지 않는다는 것을 알 수 있습니다.

요약

메모이제이션은 불필요한 반복 계산을 방지하고 계산 속도를 향상시킬 수 있는 최적화 기술입니다.

위 내용은 JavaScript에서의 Memoization 사용법 소개(코드)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제