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