Snap.svg проти Svg.js [закрито]


77

Я спробував знайти відповідну бібліотеку SVG для сучасних браузерів. Моя мета - вирішити, яка бібліотека підходить для створення простого онлайн-редактора SVG, наприклад. редагування тексту та контуру та відсікання тексту із контурами.

Я знайшов дві бібліотеки, які можуть бути придатні: Snap.svg і Svg.js .


SNAP.SVG

Github: https://github.com/adobe-webplatform/Snap.svg
Рядки вихідного коду: 6925 Github Stars: 3445
Doc: http://snapsvg.io/docs/
Початок роботи: http://snapsvg.io/start /
Приклад для початківців ( JSBIN )

var draw = Snap(800, 600);

// create image
var image = draw.image('/images/shade.jpg', 
                       0, -150, 600, 600);

// create text
var text = draw.text(0,120, 'SNAP.SVG');

text.attr({
  fontFamily: 'Source Sans Pro',
  fontSize: 120,
  textAnchor: 'left'
});

// clip image with text
image.attr('clip-path', text);

SVG.JS

Github: https://github.com/svgdotjs/svg.js
Рядки вихідного коду: 3604 Github Stars: 1905
Doc: https://svgdotjs.github.io/

Початковий приклад ( JSBIN ):

var draw = SVG('drawing');

// create image
var image = draw.image('/images/shade.jpg');
image.size(600, 600).y(-150);

// create text
var text = draw.text('SVG.JS').move(300, 0);
text.font({
  family: 'Source Sans Pro',
  size: 180,
  anchor: 'middle',
  leading: '1em'
});

// clip image with text
image.clipWith(text);

Здається, використання досить схоже.

Які основні відмінності між цими двома бібліотеками?


14
Це може бути питання, яке ґрунтується на думках, але воно чудове, і думки людей, які насправді користувались бібліотеками, можуть значно заощадити час для тих, хто намагається вирішити, куди вкласти свій час. Крім того, більшість відповідей на СО ґрунтуються на думках.
isapir

2
@Igal, навпаки, час, "витрачений" на незакриті питання, засновані на думках, є ... незначним. Принаймні 56 людей вважали, що це питання справді варто.
KlaymenDK

1
@KlaymenDK Я думаю, що тисячі людей знайшли це питання корисним, оскільки його ще переглядали 19 257 разів. Більшість людей просто не турбуються проголосувати питання чи відповіді, навіть якщо вони вважають це корисним.
isapir

Відповіді:


81

Я є творцем SVG.js (тому я теж упереджений :). Вам доведеться спробувати їх обох і подивитися, що вам найбільше підходить. За допомогою SVG.js я намагаюся підтримувати синтаксис більше на основі JavaScript, щоб все було динамічніше, тоді як Snap часто використовує синтаксис на основі рядків. Це робить отриманий код часто більш зручним для читання у SVG.js, що я вочевидь віддаю перевагу. Візьмемо для прикладу градієнт.

SNAP.SVG:

var g = paper.gradient("L(0, 0, 100, 100)#000-#f00:25%-#fff");

paper.circle(50, 50, 40).attr({
  fill: g
});

SVG.JS:

var g = draw.gradient('linear', function(stop) {
  stop.at(0, '#000')
  stop.at(0.25, '#f00')
  stop.at(1, '#fff')
})

draw.circle(80).center(50,50).fill(g)

Синтаксис Snap.svg дещо лаконічніший, код SVG.js - читабельніший. Тож це справді питання смаку.

Як правило, SVG.js набагато більш об'єктно-орієнтований. Все - це клас, навіть до цифр та кольорів, і тому його можна розширити. Завдяки структурі ОО надзвичайно легко писати плагіни та розширювати існуючі об’єкти на будь-якому рівні.


11
Здається, у SVG.js є дуже заохочений та орієнтований на спільноти творець - це теж може бути плюсом! :) Я також віддаю перевагу ланцюговому кодуванню більше, ніж схемі jQuery "на основі рядків".
Флоріан Лох

@wout: Завдяки svg.js у файлі SVG, чи можна захопити елемент документа замість того, щоб вставляти зайві елементи?
Вілліхам Тотланд,

2
@wout: Чудова робота! Я почав із snap.svg тиждень тому, але вже мав певні сумніви. Читаючи документацію svg.js, я виявляю речі, які, як мені здається, відсутні в Snap, як відносний рух. І я бачу такі речі, як viewbox, rbox, клас Use, defs, більше функцій та фільтрів, що полегшують (з плагінами), циклічні анімації. Загалом це здається більш модульним та відкритим. Також документація на svg.js видається більш складною та повною. Я просто сподіваюся, що svg.js працює так само добре, як snap.svg, оскільки snap націлений саме на новіші браузери. Будь-які думки з цього приводу? Чи проводили люди тести?
Тійс Керсельман,

1
@ 0x80 svg.js легко перевершує snap.svg. Простий attr()тест на jsperf показує, що він принаймні в 5 разів швидший: jsperf.com/raphael-vs-snapsvg-attr/3 . Також візьміть до уваги, що svg.js має лише половину розміру оснащення, і, як ви самі заявили, він більше багатий на функції.
wout

3
Подивіться на це так, кожна маніпуляція з елементом здійснюється за допомогою attr()методу. Цей метод є центром змін, тому, якщо він повільний, загальний показник продуктивності експоненціальний. Що стосується Raphael vs Snap, обидві бібліотеки є одним автором. Snap - це, в основному, Raphael 3.0, і якщо ви подивитесь на код, то побачите багато подібностей. Мене бентежить, чому Snap працює так погано, особливо завдяки підтримці Adobe.
wout

16

Спочатку я спробував Snap, оскільки він мав приємний веб-сайт і, здавалося б, хорошу документацію. Після кількох питань, які я не міг пояснити, я вирішив спробувати SVG.js. Я не можу точно визначити, чому, але SVG.js здається простішим для написання; інтуїтивніше. Я не кажу, що Snap поганий, але він не відповідає моєму стилю, а документація була трохи мізерною за змістом.


4
Документація Snap.svg також болісна для мене. Він автоматично генерується, залишаючи читачеві найважливіші речі на здогад. Крім того, не перехід з версії 0.3.0 (що здається корисним - наразі знайдено лише одну помилку) може означати відсутність імпульсу.
akauppi

Я не можу змусити svg.js працювати. У когось є робочий приклад?
Девід Спектор,

13

Я не впевнений, що ви отримаєте неупереджену відповідь, оскільки більшість людей матимуть досвід того чи іншого.

Оскільки обидва вони є по суті інтерфейсами до базової специфікації SVG, ви повинні мати змогу робити більшість речей з будь-яким, тому я б не надто турбувався про вибір. Рішення будуть схожими, а не бачити відмінності.

У мене більше досвіду з Snap (настільки упередженим), але, дивлячись на документи, мої враження склалися б, що svg.js, здається, має трохи більше цукру до деяких аспектів, таких як анімація та текст, тоді як, можливо, Snap має трохи більше до речей на зразок Матриць (які мені здаються дуже корисними, оскільки я часом борюся з ними), і, схоже, підтримує кілька додаткових речей, таких як сенсорні елементи (я підозрюю, що вони доступні як в деякому роді, так і частково залежать від підтримки браузера, але такі речі, як підтримка дотику може стати дедалі важливішою зі svg).

Зрештою, я просто отримав би кодування в одному чи іншому і не хвилювався б про це. Думаю, якщо ви зрозумієте SVG, ви зможете помінятись місцями між ними порівняно легко, якщо вам коли-небудь знадобиться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.