Kısa cevap:
Seçim ve hareket ettirme zaten yerleşik olduğundan SVG sizin için daha kolay olurdu . SVG nesneleri DOM nesneleridir, bu nedenle "tıklama" işleyicileri vb.
DIV'leri tamam ama aksak ve sahip korkunç sayıda performans yükleme.
Tuval en iyi performansa sahiptir, ancak yönetilen durumun (nesne seçimi vb.) Tüm kavramlarını kendiniz uygulamanız veya bir kitaplık kullanmanız gerekir.
Uzun cevap:
HTML5 Canvas, sadece bit eşlemi için bir çizim yüzeyidir. Çizmek için ayarladınız (bir renk ve çizgi kalınlığı ile söyleyin), o şeyi çizin ve sonra Tuval'in o şey hakkında hiçbir bilgisi yok: Nerede olduğunu veya ne çizdiğinizi bilmiyor, sadece piksel. Dikdörtgenler çizmek ve hareket ettirmek veya seçilebilir olmak istiyorsanız, bunları çizdiğinizi hatırlamak için kod da dahil olmak üzere , hepsini sıfırdan kodlamanız gerekir.
Öte yandan SVG, oluşturduğu her nesneye referanslar sağlamalıdır. Oluşturduğunuz her SVG / VML öğesi, DOM'daki gerçek bir öğedir. Varsayılan olarak bu, oluşturduğunuz öğeleri daha iyi takip etmenizi sağlar ve fare olayları gibi şeylerle uğraşmayı varsayılan olarak kolaylaştırır, ancak çok sayıda nesne olduğunda önemli ölçüde yavaşlar
Bu SVG DOM referansları, çizdiğiniz şeylerle başa çıkmanın bazı ayaklarının sizin için yapıldığı anlamına gelir. Ve SVG gerçekten büyük nesneleri oluştururken daha hızlıdır , ancak birçok nesneyi oluştururken daha yavaştır .
Tuval'de bir oyun muhtemelen daha hızlı olurdu. Büyük bir harita programı SVG'de muhtemelen daha hızlı olacaktır. Canvas'ı kullanmak istiyorsanız, hareketli nesneleri burada çalışmaya ve çalıştırmaya yönelik bazı eğitimlerim var .
Tuval, daha hızlı şeyler ve ağır bitmap manipülasyonu (animasyon gibi) için daha iyi olurdu, ancak çok fazla etkileşim istiyorsanız daha fazla kod alacaktır.
Tuval yapımı çizime karşı HTML DIV yapımı çizimde bir dizi sayı çalıştırdım. Her birinin faydaları hakkında büyük bir yazı gönderebilirim, ancak testlerimin ilgili sonuçlarından bazılarını özel uygulamanız için değerlendireceğim:
Canvas ve HTML DIV test sayfaları yaptım, her ikisinin de hareketli "düğümleri" vardı. Tuval düğümleri, Javascript'te oluşturduğum ve izlediğim nesnelerdi. HTML düğümleri hareketli Div'lerdir.
İki testimin her birine 100.000 düğüm ekledim. Oldukça farklı performans gösterdiler:
HTML test sekmesinin yüklenmesi sonsuza dek sürdü (5 dakikadan biraz az bir sürede zamanlanmış, krom sayfayı ilk kez öldürmek istedi). Chrome'un görev yöneticisi sekmenin 168 MB yer kapladığını söylüyor. Baktığım zaman% 12-13 CPU zamanı, bakmadığım zaman% 0 alıyor.
Canvas sekmesi bir saniyede yüklenir ve 30 MB alır. Ayrıca, bakıp bakmadığına bakılmaksızın her zaman CPU süresinin% 13'ünü alır. (2013 edit: Çoğunlukla bunu düzelttiler)
HTML sayfasındaki sürükleme, tasarımın beklediği daha pürüzsüzdür, çünkü mevcut kurulum, TEST testindeki her 30 milisaniyede bir HER ŞEYİ yeniden çizmektir. Bunun için Canvas için yapılabilecek birçok optimizasyon var. (tuval geçersiz kılma en kolay, aynı zamanda kırpma bölgeleri, seçici yeniden çizim vb.)
Hiç kuşkusuz, Canvas'ın bu basit testteki div'ler olarak nesne manipülasyonunda daha hızlı olmasını ve elbette yükleme süresinde çok daha hızlı olmasını sağlayabilirsiniz. Tuvalde çizim / yükleme daha hızlıdır ve optimizasyonlar için çok daha fazla alana sahiptir (yani, ekran dışı olan şeyleri hariç tutmak çok kolaydır).
Sonuç:
- SVG, az sayıda öğeye sahip uygulamalar ve uygulamalar için muhtemelen daha iyidir (1000'den az mı? Gerçekten bağlıdır)
- Tuval binlerce nesne ve dikkatli manipülasyon için daha iyidir, ancak yerden kaldırmak için çok daha fazla kod (veya kütüphane) gerekir.
- HTML Div'leri tıknazdır ve ölçeklenmez, bir daire yapmak sadece yuvarlatılmış köşelerle mümkündür, karmaşık şekiller yapmak mümkündür, ancak yüzlerce küçük piksel çapında küçük div içerir. Delilik başlar.