- DOM 우선 고려해야할 Performance Tuning
카테고리 : 튜닝정보 2006/10/30 16:57 Dom 객체를 선언할때 흔히들
var node = document.createElement("div");
위와 같이 선언하여 사용하게 되는데 이 경우는 느린 출력 결과를 보인게 된다.
아래는 내가 작성한 간단한 Performace 튜닝의 결과이다.
DOM, InnerHTML을 이용한 방법이다.
소스를 가져다가 테스트 해보세요.. 직접
<------------------------------------------------------------------------->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script>
function aa()
{
var st = new Date().getTime();
var tNode = document.getElementById("test");
for(var i=0; i<5000; i++)
{
var node = document.createElement("div");
node.innerHTML = i+'번째 생성';
tNode.appendChild(node);
}
var t = new Date().getTime() - st;
var tmNode = document.getElementById("time");
tmNode.innerHTML = ('DOM으로 작성된 시간:'+t);
}
function bb()
{
var st = new Date().getTime();
var tNode = document.getElementById("test");
var h = '';
for(var i=0; i<5000; i++)
{
h += '<div>'+i+'번째 생성</div>';
}
tNode.innerHTML = h;
var t = new Date().getTime() - st;
var tmNode = document.getElementById("time");
tmNode.innerHTML = ('InnerHTML으로 작성된 시간:'+t);
}
function cc()
{
var st = new Date().getTime();
var tNode = document.getElementById("test");
var h = new Array();
for(var i=0; i<5000; i++)
{
h[h.length] = '<div>'+i+'번째 생성</div>';
}
tNode.innerHTML = h.join(' ');
var t = new Date().getTime() - st;
var tmNode = document.getElementById("time");
tmNode.innerHTML = ('DOM으로 작성된 시간:'+t);
}
</script>
</HEAD>
<BODY>
<a href="javascript:;" onclick="aa();">돔으로 만들기</a>
<a href="javascript:;" onclick="bb();">innerHTML 만들기</a>
<a href="javascript:;" onclick="cc();">더 튜닝된 innerHTML 만들기</a>
<div id="test">
</div>
<div id="time">
</div>
</BODY>
</HTML>
<------------------------------------------------------------------------->
뭐 대충 테스트하기 위해서 만들어진 쏘스이므로 그냥 보시길 바랍니다.
테스트 결과는 다음과 같습니다.
DOM으로 작성된 시간 : 2734
InnerHTML로 작성된 시간 : 328
더 튜닝된 innerHTML 만들기 : 125
물론 사용자의 환경에 따라서 저 수치는 다를 수 있으나, 결과값을 저와 동일할 것입니다.
이 문서는 상당히 오래된 문서이면서도 가장 기본적이라고 생각됩니다.
함수 bb, cc의 차이점은 무엇인가?
두 함수는 어찌보면 동일해 보인다.
하지만 cc함수에서는 h라는 배열을 사용하여, 내용을 담고 마지막에 join(' ')문으로 다시 처리해준 것이다.
그것만 하더라도 약 2배의 향상된 속도를 보인다.
간단하지만 대단한 결과이지 않은가? ㅎㅎ;
DOM쓸때는 쓰고 innerHTML쓸때는 써야겠죠..
반복적으로 사용할경우 DOM은 사용자의 화면을 계속 멈추어 버리는 현상을 가져갑니다.
흠...
- javascript, dom, performance
