짧은 대답 :
SVG가 더 쉬울 것입니다 선택과 이동이 이미 내장되어 있기 때문에 입니다. SVG 객체는 DOM 객체이므로 "클릭"핸들러 등이 있습니다.
DIV는 괜찮지 만 어색하고 끔찍합니다 많은 수의 성능 부하를.
Canvas는 최상의 성능을 제공하지만 관리 상태 (개체 선택 등)의 모든 개념을 직접 구현하거나 라이브러리를 사용해야합니다.
긴 대답 :
HTML5 Canvas는 단순히 비트 맵을위한 드로잉 표면입니다. 당신은 (색상과 선 두께로 말해) 그리기를 설정하고, 그 다음에 그 그림을 알지 못합니다. 캔버스는 그 물건에 대해 알지 못합니다. 단지 픽셀. 사각형을 그리거나 이동하거나 선택하려면 사각형 을 그린 것을 기억하는 코드를 포함 하여 처음부터 끝까지 코딩해야합니다.
반면에 SVG는 렌더링하는 각 객체에 대한 참조를 유지해야합니다. 생성 한 모든 SVG / VML 요소는 DOM의 실제 요소입니다. 기본적으로 이렇게하면 생성 한 요소를 훨씬 더 잘 추적 할 수 있으며 기본적으로 마우스 이벤트와 같은 문제를보다 쉽게 처리 할 수 있지만 많은 수의 객체가있을 경우 속도가 크게 느려집니다
이러한 SVG DOM 참조는 당신이 그리는 것들을 다루는 발자국 중 일부가 당신을 위해 수행되었음을 의미합니다. SVG는 실제로 큰 객체를 렌더링 할 때는 빠르지 만 많은 객체를 렌더링 할 때는 느립니다 .
캔버스에서 게임이 더 빠를 것입니다. SVG에서 거대한지도 프로그램이 더 빠를 것입니다. Canvas를 사용하려면 움직일 수있는 객체를 만들고 실행하는 방법에 대한 자습서가 있습니다. .
Canvas는 더 빠른 작업과 많은 비트 맵 조작 (애니메이션과 같은)에는 좋지만 많은 상호 작용을 원할 경우 더 많은 코드를 사용합니다.
HTML DIV 제작 도면과 Canvas 제작 도면에서 많은 숫자를 실행했습니다. 각각의 이점에 대해 큰 글을 쓸 수는 있지만 특정 응용 프로그램에 대해 고려해야 할 관련 테스트 결과를 제공합니다.
Canvas와 HTML DIV 테스트 페이지를 만들었습니다. 둘 다 움직일 수있는 "노드"를 가지고있었습니다. 캔버스 노드는 Javascript에서 만들고 추적 한 객체였습니다. HTML 노드는 움직일 수있는 Divs였습니다.
두 테스트 각각에 100,000 개의 노드를 추가했습니다. 그들은 상당히 다르게 수행했습니다.
HTML 테스트 탭을로드하는 데 시간이 조금 걸렸습니다 (약 5 분이 채 걸리지 않아 Chrome에서 처음으로 페이지를 죽 이도록 요청했습니다). 크롬의 작업 관리자는 탭이 168MB를 차지한다고 말합니다. 내가 볼 때 CPU 시간은 12-13 %,보고 있지 않을 때는 0 %가 걸립니다.
캔버스 탭은 1 초 안에로드되며 30MB를 차지합니다. 또한보고 있든 없든 항상 CPU 시간의 13 %를 차지합니다. (2013 편집 : 그들은 주로 고정했습니다)
현재 설정이 Canvas 테스트에서 30 밀리 초마다 다시 그려 지므로 HTML 페이지를보다 부드럽게 드래그 할 수 있습니다. 이를 위해 Canvas에 대한 최적화가 많이 있습니다. (캔버스 무효화가 가장 쉬우 며 클리핑 영역, 선택적 다시 그리기 등은 구현하려는 느낌에 따라 다릅니다.)
의심 할 여지없이, 간단한 테스트에서 div가 객체 조작에서 Canvas가 더 빨라지고로드 시간이 훨씬 빠를 수 있습니다. 캔버스에서 그리기 /로드가 더 빠르며 최적화를위한 훨씬 더 많은 공간이 있습니다 (예를 들어, 화면 밖의 것을 제외하는 것은 매우 쉽습니다).
결론:
- SVG는 아마도 항목이 적은 응용 프로그램 및 응용 프로그램에 더 좋습니다 (1000 미만? 실제로 의존합니다)
- 캔버스는 수천 개의 객체와 신중한 조작에 더 좋지만,이를 처리하려면 훨씬 더 많은 코드 (또는 라이브러리)가 필요합니다.
- HTML Divs는 복잡하고 크기가 조정되지 않으므로 둥근 모서리로만 원을 만들 수 있으며 복잡한 모양을 만들 수 있지만 수백 개의 작은 픽셀 너비 div가 필요합니다. 광기가 발생합니다.