> 웹 프론트엔드 > JS 튜토리얼 > 가상 DOM에 대한 간단한 업데이트를 통한 DOM 조작

가상 DOM에 대한 간단한 업데이트를 통한 DOM 조작

Susan Sarandon
풀어 주다: 2025-01-09 06:39:50
원래의
884명이 탐색했습니다.

TLDR

소개

웹 애플리케이션을 구축할 때 개발자가 직면하는 가장 근본적인 과제 중 하나는 사용자 상호 작용 및 상태 변경에 대응하여 DOM(문서 개체 모델)을 효율적으로 업데이트하는 것입니다. 각각 DOM 조작에 대한 서로 다른 접근 방식을 보여주는 todo 애플리케이션의 세 가지 구현을 검토하여 이 개념을 살펴보겠습니다.

DOM Manipulation from Simple Updates to Virtual DOM

Github: https://github.com/sreeharsha-rav/javascript_projects/blob/main/todo-app/README.md

DOM 업데이트의 진화

1. 직접적인 DOM 조작: 간단한 접근 방식

첫 번째 구현에서는 가장 간단한 접근 방식을 사용했습니다. 즉, 변경이 발생할 때마다 DOM을 직접 조작하는 것입니다. 다음은 새로운 할 일 추가를 처리하는 방법을 단순화한 버전입니다.

function addTodo() {
    const todoText = input.value;
    const todoElement = document.createElement('div');
    todoElement.textContent = todoText;
    todoList.appendChild(todoElement);
}
로그인 후 복사

이 접근 방식은 직관적이고 간단한 애플리케이션에 적합하지만 다음과 같은 제한 사항이 있습니다.

  • 각 작업은 DOM에 직접 닿습니다
  • 애플리케이션 상태를 추적할 중앙 위치가 없습니다
  • 여러 업데이트에서 일관성을 유지하기 어려움
  • 잦은 업데이트로 비효율적일 수 있음

2. 상태 기반 DOM 조작: 구조 추가

두 번째 구현에서는 상태 관리 개념이 도입되었습니다. DOM을 직접 조작하는 대신 중앙 상태를 유지하고 해당 상태를 기반으로 DOM을 업데이트했습니다.

const todoStore = new Map();

function addTodo(text) {
    // Update state
    const id = nextId++;
    todoStore.set(id, {
        text,
        completed: false
    });

    // Update DOM
    const todoElement = createTodoElement(text, id);
    todoList.appendChild(todoElement);
}
로그인 후 복사

이 접근 방식은 다음과 같은 몇 가지 개선 사항을 가져왔습니다.

  • 데이터(상태)와 프리젠테이션(DOM)의 명확한 분리
  • 보다 예측 가능한 애플리케이션 동작
  • 실행 취소/다시 실행과 같은 기능 구현이 더 쉬워졌습니다
  • 더 나은 코드 구성

그러나 우리는 여전히 과제에 직면했습니다. DOM 업데이트의 효율성을 보장하고 상태와 UI 간의 일관성을 유지해야 한다는 것입니다.

3. 가상 DOM과 유사한 접근 방식: 스마트 업데이트

최종 구현에서는 상태 비교를 사용하는 간단한 가상 DOM과 유사한 메커니즘을 도입했습니다. 이 접근 방식은 정교함의 상당한 도약을 나타냅니다.

let todoState = [];      // Current state
let oldTodoState = [];   // Previous state

function updateState(newTodos) {
    // Find what changed
    const added = newTodos.filter(newTodo => 
        !oldTodoState.some(oldTodo => oldTodo.id === newTodo.id)
    );
    const deleted = oldTodoState.filter(oldTodo => 
        !newTodos.some(newTodo => newTodo.id === oldTodo.id)
    );
    const updated = // ... find updated items

    // Update only what changed
    added.forEach(todo => addTodoElement(todo));
    deleted.forEach(todo => removeTodoElement(todo));
    updated.forEach(todo => updateTodoElement(todo));

    // Save current state for next comparison
    oldTodoState = [...newTodos];
}
로그인 후 복사

화해와 차이의 이해

React에서 대중화된 조정의 개념은 원하는 상태에 맞게 DOM을 효율적으로 업데이트하는 것입니다. 우리의 간단한 구현은 세 가지 주요 측면을 보여줍니다.

1. 상태 비교

현재 상태와 이전 상태의 두 가지 버전을 유지합니다. 이를 통해 업데이트 간에 변경된 내용을 정확하게 감지할 수 있습니다. 이러한 차이점을 찾는 과정을 '비교'라고 합니다.

2. 최소한의 업데이트

모든 것을 재구축하는 대신 변경된 사항만 업데이트합니다.

  • DOM에 새 항목이 추가되었습니다
  • 제거된 항목은 DOM에서 삭제됩니다
  • 수정된 항목은 그대로 업데이트됩니다

3. 일괄 처리

모든 DOM 업데이트는 모든 차이점을 계산한 후 단일 패스로 수행됩니다. 변경 사항이 발생하면 한 번에 하나씩 업데이트하는 것보다 더 효율적입니다.

스마트 DOM 조작의 이점

이러한 구현을 진행하면서 다음과 같은 몇 가지 이점을 얻었습니다.

  1. 성능: 변경된 내용만 업데이트하여 비용이 많이 드는 DOM 작업을 최소화합니다.
  2. 예측 가능성: 단일 진실 소스(우리 주)를 사용하면 애플리케이션을 더 쉽게 이해하고 디버깅할 수 있습니다.
  3. 확장성: 애플리케이션이 성장하더라도 비교 접근 방식은 여전히 ​​효율적입니다.
  4. 유지관리성: 관심사를 명확하게 분리하면 코드를 더 쉽게 이해하고 수정할 수 있습니다.

실제 영향

구현이 단순화되었지만 React와 같은 최신 프런트엔드 프레임워크의 핵심 개념을 보여줍니다. React의 실제 Virtual DOM 구현은 다음을 처리하여 더욱 정교합니다.

  • 복잡한 중첩 구조
  • 행사위임
  • 구성요소 수명주기
  • 일괄 업데이트
  • 크로스 브라우저 호환성

결론

Todo 애플리케이션의 발전은 DOM 조작에 대한 다양한 접근 방식과 다양한 장단점을 보여줍니다. 직접 조작은 이해하고 구현하기가 더 간단하지만 상태 관리 및 스마트 업데이트를 갖춘 보다 구조화된 접근 방식을 통해 유지 관리 및 확장이 더 용이한 애플리케이션을 만들 수 있습니다.

화해와 차이점의 개념은 단순화된 형태에서도 React와 같은 최신 프레임워크가 왜 그렇게 강력한지 보여줍니다. 이러한 복잡한 업데이트를 자동으로 처리하므로 개발자는 DOM 업데이트를 최적화하는 대신 기능 구축에 집중할 수 있습니다.

웹 애플리케이션이 더욱 복잡해짐에 따라 이러한 기본 개념을 이해하는 것이 점점 더 중요해지고 있습니다. 프레임워크를 사용하든 처음부터 무언가를 구축하든 DOM 업데이트가 작동하는 방식과 이유를 알면 더욱 효과적인 개발자가 될 수 있습니다.

위 내용은 가상 DOM에 대한 간단한 업데이트를 통한 DOM 조작의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿