AJAX나 Javascript를 쓰다보면 innerHTML을 쓸일이 꼭 생긴다.

몇 줄 안되는 html 같은 경우 innerHTML로 넣으면 그럭저럭 빠르다. 티도 안나니  굳이 속도도 따질 필요도 없다. 하지만

------------------------------------

<p><strong>TEST</strong></p>
<div>TEST<span>TEST</span>TEST</div>
<em>TEST</em>

------------------------------------


이런게 1000개 2000개 이렇게 innerHTML로 만든다면 속도를 생각 안할수 없다.

한번 직접 innerHTML로 만들어 보면 속도 부분의 이슈가 꼭 생길것이다..


innerHTML로 html 을 넣는다면 대부분 이렇게 넣는다.


------------------------------------

var sHTML = "";

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

{

    sHTML += "<p><strong>TEST</strong></p>"
               + "<div>TEST<span>TEST</span>TEST</div>"

               + "<em>TEST</em>";

}

document.getElementById("target").innerHTML = sHTML;

------------------------------------

<div id="target"></div>

------------------------------------


만들어보면 알겠지만.. 엄청 느리다..




다른 방법이 없는가 찾다가 3가지 방법을 찾아냈다. (document.write()는 제외함)

 

1. Array에 문자열을 넣어 innerHTML 에서 Array.join("") 하여 출력하는것

------------------------------------

var aHTML = [];

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

{

    aHTML.push("<p><strong>TEST</strong></p><div>TEST<span>TEST</span>TEST</div><em>TEST</em>");

}

document.getElementById("target").innerHTML = aHTML.join("");

------------------------------------

 

 

2. DOM을 가지고 document.createElement() 하여 appendChild() 하는것

------------------------------------

var oParent = document.getElementById("target");
var oClone = oParent.cloneNode(false);
for (var i=0; i<1000; i++) {
 // 엘리멘트 만들고 텍스트룰 붙혀 넣고 oClone의 자식으로 추가 시킴
}
oParent.parentNode.replaceChild(oClone, oParent);

------------------------------------

 

 

3. DOM을 가지고 document.createDocumentFragment()로 만드는것

------------------------------------

var oParent = document.getElementById("target");
var oClone = oParent.cloneNode(false);
var oTemplate = document.createDocumentFragment();
/*
HTML구조를 엘리멘트형태로 생성하고 삽입한다
만든 구조를 현재 아이템인 oTemplate에 추가한다
*/

var oTmp = null;
for (var i=0; i<1000; i++) {
    oTmp = oTemplate.cloneNode(true);
    // oTemplate 안에 텍스트 노드를 삽입함
    oClone.appendChild(oTmp);
}
oParent.parentNode.replaceChild(oClone, oParent);

------------------------------------

 

 

이렇게 있었다.

 


아래 링크 가보면 총 4가지 방법(날 string 방법 포함한)에 대한 설명과 예제소스 속도 비교 페이지를 제공한다.

http://www.dengodekode.dk/artikler/DOM/no_innerhtml.php



테스트 해보니 여러 브라우저에서 사용하기 위해서 Array.join("") 이 제일 빠른듯 하다

Posted by 회사원Z
:

카테고리

More More* (98)
iPHONE* (7)
Power Builder* (31)
HTML5* (2)
CSS3* (1)
jQuery & JavaScript* (17)
ASP* (20)
MSSQL* (10)
ETC* (10)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2025/05   »
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

글 보관함