簡単な答え:
選択と移動はすでに組み込まれているため、SVG の方が簡単です。SVG オブジェクトは DOM オブジェクトであるため、「クリック」ハンドラなどがあります。
DIV は問題ありませんが、扱いにくく、大量にロードするとパフォーマンスが低下します。
キャンバスは最高のパフォーマンスを発揮しますが、管理された状態 (オブジェクトの選択など) のすべての概念を自分で実装するか、ライブラリを使用する必要があります。
長い答え:
HTML5 Canvas は、単なるビットマップの描画面です。描画するように設定し (たとえば、色と線の太さで)、そのものを描画すると、キャンバスはそのことを認識しません。キャンバスは、それがどこにあるのか、あなたが今描いたものが何であるかを知りません。ちょうどピクセル。四角形を描画して移動させたり、選択可能にしたい場合は、描画したことを記憶するコードを含め、すべてを最初からコーディングする必要があります。
一方、SVG は、レンダリングする各オブジェクトへの参照を維持する必要があります。作成するすべての SVG/VML 要素は、DOM 内の実際の要素です。デフォルトでは、これにより、作成した要素をより適切に追跡でき、デフォルトでマウスイベントなどを簡単に処理できますが、オブジェクトが多数ある場合は大幅に遅くなります。
これらの SVG DOM 参照は、描画したものを処理するフットワークの一部が自動的に行われることを意味します。また、非常に大きなオブジェクトをレンダリングする場合は SVG の方が高速ですが、多くのオブジェクトをレンダリングする場合は遅くなります。
ゲームはおそらく Canvas の方が高速です。巨大なマップ プログラムは、おそらく SVG の方が高速です。Canvas を使用したい場合は、移動可能なオブジェクトを起動して実行するためのチュートリアルがいくつかあります。
Canvas は、より高速でビットマップ操作 (アニメーションなど) が多い場合に適していますが、多くの対話性が必要な場合は、より多くのコードが必要になります。
私は、HTML DIV で作成した描画と Canvas で作成した描画について、多くの数字を実行しました。それぞれの利点について大きな記事を書くこともできますが、特定のアプリケーションについて検討するために、テストの関連結果のいくつかを紹介します。
Canvas と HTML DIV のテスト ページを作成しました。どちらも移動可能な「ノード」を備えていました。キャンバス ノードは、私が Javascript で作成して追跡したオブジェクトでした。HTML ノードは移動可能な Div でした。
2 つのテストのそれぞれに 100,000 ノードを追加しました。それらはまったく異なるパフォーマンスを示しました。
HTML テスト タブの読み込みに時間がかかりました (時間は 5 分弱で、Chrome は最初にページを強制終了するように求められました)。Chrome のタスク マネージャーは、タブが 168 MB を占めていると言っています。見ているときは 12 ~ 13% の CPU 時間を消費し、見ていないときは 0% です。
[キャンバス] タブは 1 秒で読み込まれ、30 MB を占めます。また、見ているかどうかに関係なく、常に CPU 時間の 13% を占めています。(2013年編集:彼らはほとんどそれを修正しました)
現在の設定では、Canvas テストで 30 ミリ秒ごとにすべてを再描画するようになっているため、HTML ページでのドラッグはよりスムーズです。このために、Canvas には多くの最適化が必要です。(キャンバスの無効化が最も簡単で、領域のクリッピング、選択的な再描画なども含まれます。どれだけ実装したいかによって異なります)
この単純なテストでは、キャンバスのオブジェクト操作が div のように高速になり、もちろんロード時間もはるかに高速になることは間違いありません。描画/読み込みは Canvas の方が高速で、最適化の余地もはるかに大きくなっています (つまり、画面外のものを除外するのは非常に簡単です)。
結論:
- SVG は、アイテムが少ない (1000 未満? 本当に依存する) アプリケーションやアプリに適していると思われます。
- Canvas は何千ものオブジェクトと慎重な操作に優れていますが、それを軌道に乗せるにはさらに多くのコード (またはライブラリ) が必要です。
- HTML Div は扱いにくく、拡大縮小もできません。円を作成するには、角を丸くする必要があります。複雑な形状を作成することは可能ですが、数百もの小さなピクセル幅の div が必要です。狂気が起こります。