Коротка відповідь:
SVG буде простішим для вас, оскільки вибір і переміщення його вже вбудовані. SVG-об’єкти - DOM-об'єкти, тому вони мають обробку "клацання" тощо.
Діви добре, але незграбні та мають жахливе завантаження продуктивності у великій кількості.
Полотно має найкращі результати роботи, але вам потрібно реалізувати всі концепції керованого стану (вибір об'єкта тощо) або скористатися бібліотекою.
Довга відповідь:
HTML5 Canvas - це просто поверхня для малювання бітової карти. Ви налаштовуєтесь малювати (скажіть із кольором та товщиною ліній), малюєте цю річ, і тоді Полотно не знає про цю річ: воно не знає, де воно, або що це, що ви тільки що намалювали, це просто пікселі. Якщо ви хочете намалювати прямокутники і змусити їх рухатись чи вибирати їх, вам доведеться кодувати все це з нуля, включаючи код, щоб пам’ятати, що ви їх намалювали.
SVG, з іншого боку, повинен підтримувати посилання на кожен об'єкт, який він надає. Кожен створений вами SVG / VML-елемент є реальним елементом у DOM. За замовчуванням це дозволяє вам набагато краще відслідковувати створені елементи та полегшує поводження з такими речами, як події миші, за замовчуванням, але це значно сповільнюється при наявності великої кількості об'єктів
Ці посилання на SVG DOM означають, що певна робота з речами, які ви малюєте, зроблена саме для вас. І SVG швидше, коли рендерують дійсно великі об'єкти, але повільніше, коли багато рендерує.
Гра, можливо, буде швидшою на Canvas. Величезна програма з картами, мабуть, буде швидшою у SVG. Якщо ви хочете використовувати Canvas, у мене є деякі підручники з отримання рухомих об'єктів і працює тут .
Полотно було б краще для швидших речей і важких маніпуляцій з растровими картами (як-от анімація), але забирає більше коду, якщо вам потрібно багато інтерактивності.
Я провів купу чисел на малюнку, виготовленому HTML DIV, порівняно з малюнком на полотні. Я можу зробити величезний пост про переваги кожного, але я дам деякі відповідні результати моїх тестів, щоб врахувати вашу конкретну заяву:
Я робив тестові сторінки Canvas та HTML DIV, обидві мали рухомі "вузли". Вузли полотна - це об’єкти, які я створив і відслідковував у Javascript. HTML-вузли були рухомими Divs.
Я додав 100 000 вузлів до кожного з моїх двох тестів. Вони виступили зовсім інакше:
Вкладка тесту HTML завантажувалася назавжди (приурочена трохи менше 5 хвилин, хром попросив убити сторінку вперше). Диспетчер завдань Chrome каже, що вкладка займає 168 Мб. Коли я дивлюся на це, це займає 12-13% часу процесора, 0% - коли я не дивлюся.
Вкладка Canvas завантажується за одну секунду і займає 30 Мб. Він також займає 13% процесорного часу весь час, незалежно від того, хто на це дивиться чи ні. (2013 редакція: Вони в основному це виправили)
Перетягування на HTML-сторінку проходить більш плавно, що очікується дизайном, оскільки поточна установка - перемальовувати ВСЕ що кожні 30 мілісекунд у тесті Canvas. Для цього Canvas потрібно багато оптимізації. (інвалідація полотна є найпростішою; також відсікання регіонів, вибіркове перемальовування тощо) залежить лише від того, наскільки ви відчуваєте, як реалізуєте
Немає сумнівів, що ви можете змусити Canvas бути швидшим при маніпулюванні об'єктом, як діви в тому простому тесті, і, звичайно, набагато швидше за час завантаження. Малювання / завантаження швидше в Canvas і також має набагато більше можливостей для оптимізацій (тобто виключити речі, які перебувають поза екраном, дуже просто).
Висновок:
- SVG, мабуть, кращий для додатків і додатків із кількома елементами (менше 1000? Дійсно залежить)
- Полотно краще для тисяч предметів і ретельних маніпуляцій, але потрібно набагато більше коду (або бібліотеки), щоб зняти його з землі.
- HTML Divs є незграбними і не масштабуються, зробити коло можливо лише закругленими кутами, зробити складні форми можливо, але передбачає сотні крихітних крихітних пікселів. Настає божевілля.