Для недавних читателей по состоянию на январь 2013 года я оценил:
- Кинетический
- Ткань
- Бумага
- Мольберт
Под "оценкой" я не просто читал документы; Я создал прототип приложения.
Я начал с Fabric, потому что у него было самое большое сообщество, и я подумал, что это будет моим решением. Но я отказался от Fabric по следующим причинам:
- странные и недокументированные несоответствия API, которые без надобности сжигали у меня много времени.
- поддержка событий несовместимого указателя. В частности, Fabric не считает «Путь» объектом истинной формы, который можно выбирать и наблюдать. Это не соответствовало моим потребностям, поскольку интерактивные пути являются основным требованием моего приложения.
- «за кулисами» добавлены переводы на холст для позиционирования объектов. На мой взгляд, Fabric пытается быть слишком умным в этом отношении, не понимая разработчику, что делает.
- чрезмерно твердое мнение о том, как работает интерактивное перемещение, изменение размера и поворот. Во многих отношениях здорово иметь эту функциональность, встроенную в фреймворк, но в моем случае я не согласился с тем, как она была реализована, что, по сути, означало, что в любом случае придется заново реализовать ее.
- скудная документация - множество случаев, когда документация метода имеет форму: "setX (Y) - установить X в Y" :-)
Я взглянул на Paper и не зашел слишком далеко. Мне это показалось чересчур тупым, и к тому же он попадает в затруднительное положение. ИМО - это слишком большая библиотека визуализации, чтобы быть простой объектной моделью для Canvas, но библиотеки визуализации недостаточно, чтобы конкурировать с D3. К тому же документация снова оказалась не особо доступной.
Я думаю, что Easel, вероятно, имеет большой смысл, если у вас есть фон Flash / ActionScript, но у меня его нет. К тому же он казался слишком ориентированным на игру для моих требований. Гвоздем в гробу снова оказалась документация - мало и представленная в нестандартном формате.
Итак, я остановился на Kinetic, потому что:
- действительно богатые и понятные уроки и примеры
- Функции API делают то, что они называют, и о них во многом можно догадаться - более высокая производительность, более поверхностная кривая обучения
- достаточно ясно понимает, что он делает, а что нет - он не такой богатый, как некоторые другие, но это преимущество; он делает меньше вещей, но делает их лучше
- Пути - это первоклассные формы гражданина, как и любые другие формы, которые были необходимы для моих требований.
Kinetic ни в коем случае не идеален, и было несколько раз, когда мне приходилось глубоко погружаться в исходный код, чтобы понять, что на самом деле происходит под покровом. Кроме того, мне не хватает синтаксического анализа SVG и вывода Fabric.