메모이제이션(memoization) 


전에 하였던 계산 또는 작업 의 결과 등을 기억하여


같은 결과를 도출 해낼시에 중간 계산 작업을 한번더 하지 않고 결과를 도출해내는 함수를 만


드는 방법이다.


매번 반복해야될 작업들에 대해서 반복하지 않도록 해주기 때문에


성능 향상을 기대해 볼수 있다.


개인적으로는 캐싱방법과 같아 보이며 캐싱을 사용하는 만큼 메모리 사용량도 늘어나기 때문에 유의 해 보여야 한다.


관련 자료를 찾다보니 함수는 함수로서의 기능만 하여야 한다는 이야기가 있지만


이거는 관련 주장으로만 보면 될것 같다.



메모이제이션이 들어간 예제를 한번 보겠다.


관련 예제는 실용성이 있는건 아니고 메모이제이션에 대한 설명으로 간단하게 작성된 예제이며 자바스크립트 함수의 캐싱 방식에 대한 예제입니다.


// 미 적용 코드 1.8~2.5초

function memoization(number)

{

console.time();

var data ='';

for(var i=0;i<number;i++)

{

data+=i;

}

console.timeEnd();

return data;

}


memoization(5000000); // 1.8~ 2.5 초
memoization(5000000); // 1.8~ 2.5 초 



// 메모이제이션 적용 코드


function memoization(number)

console.time();

// 캐시 생산 

if(!memoization.cache)

memoization.cache={};

if(memoization.cache[number]!=null){

console.timeEnd();

return memoization.cache[number];

}

var data='';

for(var i=0;i<number;i++){

data+=i;

}

console.timeEnd();

return memoization.cache[number] = data;

}




memoization(5000000); // 1.5~2.5초
memoization(5000000); // 0.001초


// 미작성 DOM 에 대한 캐싱처리는 따로 작성하겠습니다.

// 메모이제이션 함수 
/*
	Tree구조로 지정된 DOM 에 대해서 재귀 함수를 통한 마지막 element를 가져온다.
	가져온 후에 해당 Node의 뒤로 새로 생성한 동적 Node를 
	기존의 방식으로 Search 해서 추가하는 것과 메모이제이션을 사용하여서 추가하는 
	경우에 대한 시간 체크를 console.time();과 console.timeEnd(); 를 통해서 비교 합니다.
	

*/
function memoization(){
		// 처음 함수 실행시 캐시 공간을 만들기 위한 작업 
		if(!memoization.cache)
					memoization.cache ={};
			
};

function createNode(elem,text)
{
	elem = elem || document.documentElement;
 
    txt = txt || '';
 
    var $t = document.createTextNode(txt);
   
    elem.appendChild($t);
 
    return text(elem);

	
}













Posted by 깍돌이

블로그 이미지
QA를 업으로 삼고 있습니다.
깍돌이

태그목록

Yesterday
Today
Total

달력

 « |  » 2025.1
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함