Ответ 1
Я проделал довольно много работы с Protovis и несколькими вещами с D3. В дополнение к тем, о которых вы говорите, я считаю, что для меня выделяются следующие отличия:
-
Если Protovis обеспечивает упрощенный уровень абстракции между визуальными свойствами, которые вы указываете, D3 использует фактические спецификации CSS и DOM - поэтому вместо
.width(10)
или.fillStyle('#00C')
вы должны использовать.style('width', 10)
или.attr('fill', '#00C')
. В этих примерах разница довольно тривиальна, но когда вы делаете что-то вроде рисования линии в изображении SVG, есть большие различия. В результате D3 может чувствовать себя немного ниже уровня - у вас больше контроля, но вы должны быть хорошо знакомы с синтаксисом SVG, чтобы сделать некоторые из вещей, которые Protovis делает намного легче. -
Как вы заметили, Protovis все отображается в SVG, а D3 может использовать другие части DOM. Это означает, что для визуализации, не требующей визуальных элементов на основе SVG, вы можете использовать D3 даже с браузерами, которые не поддерживают SVG. Это также означает, что гораздо проще интегрировать HTML и SVG в ту же визуализацию, что очень хорошо подходит для таких вещей, как обработка текста (текстовые манипуляции и макет довольно слабый в Protovis).
-
D3 изменяет или снижает некоторые базовые утилиты Protovis, такие как масштабирование и манипулирование данными. Меня неоднократно раздражало, что основные утилиты, такие как
pv.sum()
илиpv.mean()
, не имеют эквивалентов D3, хотя некоторые, например.nest()
, совместно используются в обеих библиотеках. Редактировать 10/1/12: D3 заполнил свои утилиты данных, но все еще есть некоторые из них, которые Protovis включает, а D3 - нет.pv.dict
,pv.numerate
иpv.repeat
. Предположительно, они были исключены из-за того, что они считались менее полезными. -
D3 предоставляет утилиты для асинхронных запросов. Когда я хочу это в Protovis, мне обычно приходится использовать внешнюю библиотеку (т.е. JQuery).
-
Документация D3 API
почти полностью не хватаетнеполной, по сравнению с довольно подробными документами для Protovis. Изменить (8/30/13). Теперь у D3 теперь полная и подробная документация API на GitHub, поэтому этот момент более не актуальны. -
Наконец, я не много сделал с анимацией, но я думаю, что вы совершенно правы. D3 обеспечивает большую поддержку анимации, чем Protovis, особенно с точки зрения анимированных переходов. Protovis может повторно отображать некоторую или всю визуализацию по требованию, но не имеет никакой поддержки для перехода через анимацию с ограниченным сроком действия - вам нужно будет все это скопировать вручную с помощью
setInterval
. D3, кажется, делает это гораздо более неотъемлемой частью библиотеки.
Редактировать (7/12/11). Похоже, есть новое принципиальное различие - по состоянию на 28 июня 2011 года Protovis больше не находится в активной разработке, а команда Protovis нажимает D3.js. Последняя версия довольно стабильна, поэтому это не должно мешать вам использовать ее, но это определенно вопрос для рассмотрения.