Language/JavaScript

document.createDocumentFragment를 활용한 성능 최적화

DevL1 2024. 11. 20. 22:20

자바스크립트로 DOM을 조작할 때 성능 최적화는 중요한 고려사항입니다. 특히 대량의 DOM 요소를 추가할 때 document.createDocumentFragment를 활용하면 성능을 크게 개선할 수 있습니다. 이 글에서는 DocumentFragment의 개념과 이를 이용한 성능 최적화 방법을 살펴보겠습니다.

 

DocumentFragment란?

DocumentFragment는 메모리상에만 존재하는 경량화된 Document 객체입니다. 주요 특징은 다음과 같습니다.

  • DOM 트리의 일부가 아니므로 화면에 렌더링되지 않습니다.
  • 메모리상에서 DOM 조작을 수행할 수 있습니다.
  • 실제 DOM에 추가될 때는 자식 노드들만 추가됩니다.

 

성능 최적화의 원리

DocumentFragment를 사용하면 다음과 같은 이유로 성능이 향상됩니다.

  1. 리플로우(reflow) 최소화: DOM 조작을 메모리상에서 수행하므로 불필요한 리플로우를 줄일 수 있습니다.
  2. 일괄 처리: 여러 노드를 한 번에 추가할 수 있어 DOM 조작 횟수가 줄어듭니다.

 

구현 예시

다음은 DocumentFragment를 사용하여 리스트 아이템을 효율적으로 추가하는 예시입니다.

function createList(items) {
  const fragment = document.createDocumentFragment();
  const ul = document.createElement('ul');

  items.forEach(item => {
    const li = document.createElement('li');
    li.textContent = item;
    ul.appendChild(li);
  });

  fragment.appendChild(ul);
  document.body.appendChild(fragment);
}

const items = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5'];
createList(items);

이 방식은 DOM 조작을 최소화하여 성능을 개선합니다.

 

성능 비교

DocumentFragment를 사용하지 않고 직접 DOM에 요소를 추가하는 방식과 비교해보겠습니다.

// DocumentFragment 사용
function addItemsWithFragment(items) {
  const fragment = document.createDocumentFragment();
  items.forEach(item => {
    const li = document.createElement('li');
    li.textContent = item;
    fragment.appendChild(li);
  });
  document.getElementById('list').appendChild(fragment);
}

// 직접 DOM 조작
function addItemsDirectly(items) {
  const list = document.getElementById('list');
  items.forEach(item => {
    const li = document.createElement('li');
    li.textContent = item;
    list.appendChild(li);
  });
}

대량의 요소를 추가할 때 DocumentFragment를 사용하는 방식이 더 빠르고 효율적입니다.

 

결론

document.createDocumentFragment를 활용하면 DOM 조작 성능을 크게 개선할 수 있습니다. 특히 대량의 요소를 동적으로 추가할 때 유용합니다. 이 기법을 적절히 활용하여 웹 애플리케이션의 성능을 최적화해보세요.