Jawaban singkatnya:
SVG akan lebih mudah bagi Anda, karena pemilihan dan memindahkannya sudah ada di dalamnya. Objek SVG adalah objek DOM, sehingga mereka memiliki penangan "klik", dll.
DIV baik-baik saja tetapi kikuk dan mengerikan pemuatan kinerja pada jumlah besar.
Canvas memiliki performa tangan-ke-bawah terbaik, tetapi Anda harus menerapkan sendiri semua konsep status terkelola (pemilihan objek, dll), atau menggunakan perpustakaan.
Jawaban panjangnya:
HTML5 Canvas hanyalah sebuah permukaan gambar untuk bit-map. Anda mengatur untuk menggambar (Katakan dengan warna dan ketebalan garis), menggambar hal itu, dan kemudian Kanvas tidak memiliki pengetahuan tentang hal itu: Tidak tahu di mana itu atau apa itu yang baru saja Anda gambar, itu hanya piksel. Jika Anda ingin menggambar persegi panjang dan membuatnya bergerak atau dipilih maka Anda harus kode semua itu dari awal, termasuk kode untuk diingat bahwa Anda menggambar mereka.
SVG di sisi lain harus mempertahankan referensi ke setiap objek yang direndernya. Setiap elemen SVG / VML yang Anda buat adalah elemen nyata di DOM. Secara default ini memungkinkan Anda untuk melacak elemen yang Anda buat dan membuat berurusan dengan hal-hal seperti peristiwa mouse lebih mudah secara default, tetapi memperlambat secara signifikan ketika ada sejumlah besar objek
Referensi DOM SVG tersebut berarti bahwa beberapa langkah untuk menangani hal-hal yang Anda gambar dilakukan untuk Anda. Dan SVG lebih cepat saat merender objek yang sangat besar , tetapi lebih lambat saat merender banyak objek.
Sebuah game mungkin akan lebih cepat di Canvas. Program peta besar mungkin akan lebih cepat di SVG. Jika Anda ingin menggunakan Canvas, saya memiliki beberapa tutorial tentang cara membuat objek bergerak dan berjalan di sini .
Canvas akan lebih baik untuk hal-hal yang lebih cepat dan manipulasi bitmap berat (seperti animasi), tetapi akan mengambil lebih banyak kode jika Anda ingin banyak interaktivitas.
Saya telah menjalankan banyak angka pada gambar buatan DIV HTML versus gambar buatan kanvas. Saya dapat membuat posting besar tentang manfaat masing-masing, tetapi saya akan memberikan beberapa hasil tes yang relevan untuk dipertimbangkan untuk aplikasi spesifik Anda:
Saya membuat halaman pengujian Kanvas dan HTML DIV, keduanya memiliki "simpul" yang dapat dipindahkan. Node kanvas adalah objek yang saya buat dan catat di Javascript. Node HTML adalah Div yang dapat dipindahkan.
Saya menambahkan 100.000 node ke masing-masing dari dua tes saya. Mereka tampil sangat berbeda:
Tab pengujian HTML membutuhkan waktu lama untuk memuat (waktunya sedikit di bawah 5 menit, chrome diminta untuk membunuh halaman pertama kali). Pengelola tugas Chrome mengatakan bahwa tab tersebut menghabiskan 168MB. Butuh 12-13% waktu CPU ketika saya melihatnya, 0% ketika saya tidak melihat.
Tab Canvas dimuat dalam satu detik dan membutuhkan 30MB. Ini juga memakan waktu 13% dari waktu CPU sepanjang waktu, terlepas dari apakah seseorang melihatnya atau tidak. (2013 edit: Mereka sebagian besar sudah memperbaiki itu)
Menyeret di halaman HTML lebih halus, yang diharapkan oleh desain, karena pengaturan saat ini adalah untuk menggambar kembali SETIAP setiap 30 milidetik dalam tes Canvas. Ada banyak optimasi yang bisa didapat untuk Canvas untuk ini. (pembatalan kanvas menjadi yang termudah, juga memotong daerah, menggambar ulang selektif, dll. hanya tergantung pada seberapa banyak Anda ingin menerapkan)
Tidak ada keraguan Anda bisa mendapatkan Canvas menjadi lebih cepat pada manipulasi objek sebagai divs dalam tes sederhana itu, dan tentu saja jauh lebih cepat dalam waktu buka. Menggambar / memuat lebih cepat di Canvas dan memiliki ruang lebih banyak untuk optimisasi juga (yaitu, mengecualikan hal-hal yang di luar layar sangat mudah).
Kesimpulan:
- SVG mungkin lebih baik untuk aplikasi dan aplikasi dengan beberapa item (kurang dari 1000? Sangat tergantung)
- Kanvas lebih baik untuk ribuan objek dan manipulasi yang hati-hati, tetapi lebih banyak kode (atau perpustakaan) diperlukan untuk mendapatkannya dari tanah.
- Div HTML adalah kikuk dan tidak skala, membuat lingkaran hanya mungkin dengan sudut-sudut bulat, membuat bentuk-bentuk kompleks dimungkinkan tetapi melibatkan ratusan div kecil selebar pixel. Kegilaan terjadi kemudian.