2012-05-16 2 views
2

계승 계산과 같은 예를 찾아 memoization으로 설명했습니다. 이것들은 도움이되지만 나는 더 깊은 이해를 원합니다.자바 스크립트에서 메모를하는 실제 사례?

누군가가이 기술의 실제 응용 프로그램을 설명 할 수 있는지 궁금하네요 그들이 재귀 또는 어떤 다른 사람 대신에 그것을 사용하는 이유 그들 최적화 도움이 될 메모이 제이션을 사용 느꼈다.

답변

6

메모이 제이션은 좀 더 구체적인 단지 캐싱보다.

는 jQuery로 수도와 같은 선택기를 사용하여 DOM의 요소를 찾고 생각해보십시오. 말해봐, $('.some-selector'). 이 문맥에서, 나는 함수를 $이라고 부르며, CSS selector '.some-selector'를 가진 모든 요소를 ​​찾는다. 문서 크기가 커서 $('.some-selector') 번으로 전화해야한다고 가정 해 보겠습니다.

$('.some-selector')에 대한 모든 호출이 동일한 결과를 반환한다는 가정을 할 수 있으므로 호출 할 때마다 실제 처리를 수행하는 것은 낭비입니다. 따라서 $은 일부 조회 테이블이나 사전에서 인수 ('.some-selector',이 경우)를 키로 사용할 수 있습니다. 해당 인수로 함수를 처음 호출하면 정상적으로 처리되고 결과는 키로 인수를 사용하여 사전에 저장되고 결과가 리턴됩니다. 후속 호출은 키가 이미 계산 된 결과를 나타내는 사전에 값을 가지고 있으므로 이전 결과 만 반환한다는 것을 알 수 있습니다. 최종 결과는 이미 알고있는 결과를 찾는 데 시간을 낭비하지 않는다는 것입니다. 자바 스크립트 예

작은 조 :

var _dictionary = {}; 

function $(selector) { 
    if (_dictionary[selector]) return _dictionary[selector]; // lookup the results of the selector and return them if they exist 

    // otherwise, execute the function's logic normally 
    // TODO: search logic 
    var results = doSearch(); 

    _dictionary[selector] = results; 

    return results; 

} 

This link 더욱 구체적으로 진행하고, 다른 모든 기능을 위해 사용될 수있는 일반적인 memoize JS 기능을 포함한다.

+0

링크를 이용해 주셔서 감사합니다. –

2

당신은 캐시의 모든 종류의, 메모이 제이션을 사용할 수 있습니다. 예를 들어 일부 아약스 호출 결과를 캐시 할 수 있습니다.

예 : 당신이 원하는 경우에 정말 귀하의 질문에 (즉, 당신에게 메모이 제이션을 사용하는 예제를 줄입니다) 답변을 할 수 없기 때문에

var cache = new Array() 

function memoized_ajax(url, callback) (
    if (cache[url]) {  
    callback(cache[url]); // we already know the result for this url 
    } 
    else { 
    $.ajax({ 
     url: url, 
     success: function(data) { 
     cache[url] = data; // we will remember result for this url 
     callback(data); 
    }); 
    } 
} 
+0

은 메모 작성과 동기화되어 있습니까? 귀하의 예제에서 캐싱에 의해 ajax 호출의 결과를 로컬 변수에 할당하는 것입니까? –

+0

예, 당신은 함수 호출의 결과를 캐시하지만 그런 방법으로,이 함수 호출의 사용자에게 투명이다, 결과는 NOT "사용자에게 투명 것이 얼마나 내 업데이트 된 대답이나 @HackedByChinese 예를 – snies

+0

참조 함수 호출 "? –

1

당신은이를 삭제할 수 있습니다,하지만 난 메모이 제이션 점을 지적하고 싶습니다 재귀보다 완전히 다른 유형의 문제를 해결하기위한 것입니다. 메모이 제이션 저장 메소드 호출의 출력 미래 동일한 메소드 호출 (동일한 매개 변수 및 객체 바인딩)의 결과를 도출하는 룩보다는 계산이되도록. 재귀는 함수 알고리즘의 한 유형입니다. 즉, 재귀 함수의 출력을 메모 할 수 있으므로 반대하지 않습니다.

+0

memoization을 사용하는 방법을 설명해 주셔서 감사합니다. 재귀와 그들이 직접적으로 비교할 수있는 개념이 아니라는 것을 의미합니다. –

관련 문제