javascript - DOM을 직접 운영하는 것보다 가상 DOM의 반응 효율성이 더 빠른 이유는 무엇입니까?
给我你的怀抱
给我你的怀抱 2017-05-18 10:58:01
0
5
718

React에는 virtual DOM이라는 개념이 있습니다
네이티브 DOM 연산과 차이점은 JS를 사용하여 중개자와 유사한 가상 DOM을 생성한다는 점입니다.
JS를 사용하여 구현한 DOM입니다. 전후의 일부 기록을 기록합니다. 변경 후 재렌더링 시 차별화된 부분의 로컬 렌더링을 수행합니다. 이렇게 하면 전체 페이지가 렌더링되지 않습니까? 그렇다면 DOM의 기본 작업은 전체 페이지를 렌더링하는 것입니까? 인터넷에서 네이티브가 변경될 때마다 innerHTML이 직접 재설정된다는 예를 많이 봤습니다. 이 작업에 많은 양의 데이터가 사용되면 GG가 됩니다. 하? Virtual DOM은 변경 사항을 기록한 다음 diff 알고리즘을 사용하여 최적화하고 마지막으로 변경 사항이 있는 부분을 로컬로 렌더링합니다. 그러면 네이티브를 사용하여 동일한 효과를 얻을 수 없습니까? 비교를 통해 변경 사항을 찾은 다음 diff 알고리즘을 사용하여 지정된 위치에서 innerHTML을 수정할 수도 없나요? 이 효율성이 가상 돔보다 나쁠까요? 해결

给我你的怀抱
给我你的怀抱

모든 응답(5)
習慣沉默

다음 두 가지 작업을 수행할 수 있으면 React보다 더 빠르게 수행할 수 있다고 이해합니다.

  1. 불필요한 재렌더링을 피하세요.

  2. 더 나은 diff 알고리즘을 사용하세요!

자세한 내용은 작성자의 답변을stackoverflowvirtual dom 참조하세요.

某草草

이렇습니다.
일단 가상 DOM은 직접 네이티브 연산보다 빠르지 않습니다. 소위 "빠르다"는 것은 조건부입니다.
예를 들어 숫자 +1과 같이 dom의 직접 연산이 더 빠릅니다.
규칙은 수동으로 DOM을 작동할 때마다 변경해야 할 부분만 변경하는 것입니다. 그러면 DOM 작업은 항상 가상 DOM보다 빠릅니다.
그러나 변경 사항이 여러 위치에 연결되어 있고 원하는 경우. 상태를 유지하기 위해 가상 돔의 자동 비교는 의심할 여지 없이 더 많은 걱정을 덜어줄 것입니다.
예를 들어 목록에서 목록 항목에는 좋아요, 답글 수 및 기타 정보와 같은 상태가 있으며 동적 추가가 있습니다. 이때 돔을 직접 조작하는 것은 매우 번거로울 것입니다.
가상 돔의 핵심은 diff로, 조정해야 할 영역을 자동으로 계산한 다음 조정해야 할 영역만 수정하는 것입니다. 저장되는 것은 실행 속도와 같은 작은 속도가 아니라 개발 속도/유지 관리 속도/논리 단순성과 같은 "전체 속도"입니다. 물론 virtual DOM에도 단점이 있으므로 이에 대해서는 다루지 않겠습니다. 여기로

Ty80

모든 페이지의 모든 DOM 변경을 최적화하기 위해 많은 노력을 기울이면 자동화된 가상 DOM보다 확실히 더 빠를 것입니다.
문제는 일반적인 상황에서는 이를 수행하지 않는다는 것입니다.
따라서 대부분의 경우 vitrual DOM은 더 빠른 조건에서 더 강력한 기능(예: 캔버스에 컨트롤 렌더링)을 제공할 수 있습니다.

曾经蜡笔没有小新

Visual DOM은 DOM을 직접 조작하는 것보다 빠르지 않으며(작성한 코드가 충분하다면) React의 모든 메커니즘을 다시 렌더링하기 때문에 나타납니다. 즉, React의 경우 모든 변경 사항을 적용하려면 전체 애플리케이션을 다시 렌더링해야 합니다. 실제 DOM인 경우 이러한 성능은 허용되지 않습니다.

자세한 내용은 유다의 답변을 확인하실 수 있습니다

小葫芦

(VDOM diff를 사용하여 선택적으로 DOM 업데이트) (일반적으로) (매번 DOM 재구축)보다 빠릅니다.

diff 알고리즘은 일반적으로 시간 복잡도를 줄이기 위해 품질을 희생하며 가장 작은 차이를 제공한다고 보장되지 않습니다. 그런 다음 diff 결과가 DOM을 재구성하도록 여러 VDOM을 구성할 수 있어야 합니다. 이 경우 VDOM이 느려질 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿