Думайте о разнице между canvas и svg как о разнице между Photoshop и Illustrator (или Gimp и Inkscape для вас, ребята из OSS). Один касается растровых изображений, а другой - векторных изображений.
С холстом, поскольку вы рисуете в растровом изображении, вы можете легко растушевать, размывать, прожигать, избегать изображения. Но поскольку это растровое изображение, вы не можете легко нарисовать линию, а затем принять решение о ее изменении. Вам нужно удалить старую линию, а затем нарисовать новую линию.
С помощью svg, поскольку вы рисуете векторы, вы можете легко перемещать, масштабировать, вращать, перемещать, переворачивать рисунки. Но так как это векторы, вы не можете легко размывать края в соответствии с толщиной линии или плавно соединять красный круг в синий квадрат. Вам необходимо смоделировать размытие, рисуя промежуточные многоугольники между объектами.
Иногда их варианты использования перекрываются. Как и многие люди, используют canvas для создания простых линий и отслеживания объектов как структур данных в javascript. Но на самом деле они оба служат разным целям. Если вы попытаетесь реализовать векторное рисование общего назначения в чистом javascript поверх холста, я сомневаюсь, что вы будете быстрее, чем использовать svg, который наиболее вероятно реализован в C.