Чим відрізняється D3 від jQuery?


103

Посилаючись на цей приклад:

http://vallandingham.me/stepper_steps.html

видається, що бібліотеки D3 та jQuery дуже схожі в тому сенсі, що обидві виконують маніпуляції з DOM об'єктно-ланцюговим способом.

Мені цікаво дізнатися, які функції D3 полегшують, ніж jQuery і навпаки. Існує велика кількість бібліотек графіки та візуалізації, які використовують jQuery як основу (наприклад,, , ).

Наведіть, будь ласка, конкретні приклади того, чим вони відрізняються.

Відповіді:


92
  • D3 керується даними, але jQuery - це не так: з jQuery ви безпосередньо маніпулюєте елементами, але за допомогою D3 ви надаєте дані та зворотні виклики за допомогою унікальних D3 data(), enter()а exit()методи та D3 - маніпулює елементами.

  • D3 зазвичай використовується для візуалізації даних, але jQuery використовується для створення веб-додатків. D3 має багато розширень візуалізації даних, а jQuery має багато плагінів веб-додатків.

  • Обидві бібліотеки JavaScript DOM для маніпуляцій, мають селектори CSS та вільний API та базуються на веб-стандартах, що робить їх схожими.

Наступний код - приклад використання D3, що неможливо з jQuery (спробуйте його у jsfiddle ):

  // create selection
  var selection = d3.select('body').selectAll('div');

  // create binding between selection and data
  var binding = selection.data([50, 100, 150]);

  // update existing nodes
  binding
    .style('width', function(d) { return d + 'px'; });

  // create nodes for new data
  binding.enter()
    .append('div')
    .style('width', function(d) { return d + 'px'; });

  // remove nodes for discarded data
  binding.exit()
    .remove();

9
приємно, один приклад вартує більше 1000 слів
TMG

59

d3 має дурний опис. jQuery і d3 зовсім не схожі, ви просто не використовуєте їх для одних і тих же речей.

Метою jQuery є проведення загальних маніпуляцій з домом. Це загальний набір інструментів JavaScript для всього, що ви можете зробити.

d3 був розроблений в першу чергу для спрощення складання блискучих графіків за допомогою даних. Ви обов'язково повинні використовувати його (або щось подібне або щось побудоване на ньому), якщо ви хочете зробити графічні візуалізації даних.

Якщо ви хочете, щоб бібліотека JS загального призначення для всіх ваших потреб інтерактивної форми, розгляньте jQuery або прото або mootools. Якщо ви хочете чогось крихітного, розгляньте сторінку underscore.js. Якщо ви хочете чогось із введенням залежності та встановлення залежності, врахуйте AngularJS.

загальне порівняння гід з вікіпедії.

Я бачу, чому хтось подумає, що вони схожі. Вони використовують аналогічний синтаксис селектора - $ ('SELECTOR'), а d3 - надзвичайно потужний інструмент для вибору, фільтрації та роботи з елементами html, особливо під час з'єднання цих операцій разом. d3 намагається пояснити це на своїй домашній сторінці, стверджуючи, що це бібліотека загального призначення, але факт полягає в тому, що більшість людей використовують її, коли хочуть робити графіки . Досить незвично використовувати його для вашої середньої маніпуляції з домом, оскільки крива навчання d3 настільки крута. Однак це набагато більш загальний інструмент, ніж jQuery, і зазвичай люди будують інші більш конкретні бібліотеки (наприклад, nvd3) поверх d3, а не використовують його безпосередньо.

@ Відповідь Джонса також дуже хороша. Fluent API = метод ланцюга. Я також погоджуюся про те, куди плагіни та розширення ведуть вас з бібліотеками.


1
@zcaudate, d3 не за посиланням, оскільки він настільки спеціалізований. Це посилання порівнює лише загальні рамки.
Справа

1
Інше, що я хотів би додати, це те, що D3 створює SVG (масштабована векторна графіка). Це чудово, тому що речі легко змінюють розмір і легко залишаються пропорційними іншим елементам. Хоча ви, можливо, зможете виконати те ж саме в JQuery (як показано на прикладі прикладів ОП), вони не призначені для заміни один одного.
EnigmaRM

2
Вони схожі тим, що обидва працюють на Sizzle та використовують однакові селектори (величезна частина кожного фрейму). Однак після вибору вони конструюють дуже різні об'єкти маніпуляції DOM.
cchamberlain

5
+1 для дурного опису. Я досліджую чимало бібліотек та компонентів на стороні клієнта, але не оминув перше речення на їхньому веб-сайті, перш ніж відчути себе повністю втраченим. Я натиснув на вигадливу езотеричну шестикутну мозаїку «речей», і це перенесло мене кудись таємничим і не пов’язаним. Оскільки я не розумію, що тут відбувається, я вважаю, що я недостойний клубу d3. Як такий, я зменшусь, і піду на Захід, і залишатимусь d3-менше.
Джонатан Нойфельд

13

Я останнім часом використовую трохи обох. Оскільки d3 використовує селектори Sizzle, ви можете значно змішати селектори.

Зауважте, що d3.select ('# mydiv') не повертається так само, як jQuery ('# mydiv'). Це той самий елемент DOM, але він деталізується з різними конструкторами. Наприклад, скажімо, у вас є такий елемент:

<div id="mydiv" rel="awesome div" data-hash="654687867asaj"/>

І давайте захопимо кілька поширених методів:

> d3.select('#mydiv').attr('rel') ;
 "awesome div"

> jQuery('#mydiv').attr('rel');
 "awesome div"

Здається легітимним. Але якщо піти трохи далі:

> d3.select('#mydiv').data();
 [undefined]

> jQuery('#mydiv').data();
 Object {hash: "654687867asaj"}

Ага, задалися питанням, чому .data () у d3 не працює, як у jquery. У D3 доведеться встановити.attr('data-hash', '654687867asaj')
прототип

6
це погане співчуття. .data()в jQuery - це в основному ярлик для доступу до HTML-атрибуту data-<custom-name>. Але в D3 це не має нічого спільного з атрибутами даних html, і те, що він робить у D3, повертає новий вибір як об'єднання даних, переданих у аргументах з уже вибраними елементами.
nazikus

3
зараз це погане порівняння, але станом на 2013 рік він був не таким уже й поганим. З того часу jQuery випустив багато поліфілінгу для старих браузерів (атрибути даних були одним із них), тоді як D3 перестав бути монолітною бібліотекою і став замість цього вхідним пунктом для колекції менших конкретних бібліотек
ffflabs

11

D3 стосується не лише візуальних графіків. Документи, керовані даними. Коли ви використовуєте d3, ви прив'язуєте дані до вузлів dom. Через SVG ми можемо скласти графіки, але D3 - це набагато більше. Ви можете замінити рамки типу Backbone, Angular та Ember за допомогою D3.

Не впевнений, хто проголосував, але дозвольте додати ще ясності.

Багато веб-сайтів запитують дані з сервера, які зазвичай надходять із бази даних. Коли веб-сайт отримує ці дані, ми повинні зробити оновлення сторінки нового вмісту. Багато фреймворків це роблять, і d3 робить це також. Тому замість елемента svg ви можете використовувати html-елемент. Коли ви зателефонуєте до перемальовки, вона швидко оновить сторінку новим вмістом. Це справді приємно не мати всіх зайвих накладних витрат, таких як jquery, магістраль + його плагіни, кутові тощо. Ви повинні знати лише d3. Тепер у d3 немає системи маршрутизації. Але завжди можна знайти його.

Jquery, з іншого боку, єдина мета - написати менше коду. Це лише коротка версія версії javascript, яка була протестована у багатьох браузерах. Якщо на вашій веб-сторінці не дуже багато запитань. Це чудова бібліотека для використання. Це просто і вимагає багато болю від розробки Javascript для декількох браузерів.

Якщо ви спробували реалізувати jquery таким чином, як d3, це буде досить повільно, оскільки він не був розроблений для цього завдання, також d3 не призначений для розміщення даних на серверах, він призначений просто для споживання та надання даних .


1
"... замініть рамки типу Backbone, Angular і Ember на D3." чи можете ви докладно?
Біллі Мун

Зі свого досвіду я бачив, як багато людей використовують ці рамки для візуалізації діаграм і графіків, коли ви можете замінити їх на d3. Якщо хтось захотів, вони також могли б мати дані d3 візуалізації на сторінці, оскільки вона прив'язує дані до елементів. D3 може працювати з великими наборами даних швидше, ніж jQuery.
jemiloii

не впевнений, хто мене прихилив, але я б хотів, щоб вони могли залишити коментар. D3 - для документів, керованих даними. Не лише діаграми.
jemiloii

Ви можете створити багаторазовий компонент з d3 легко. bost.ocks.org/mike/chart
jemiloii

2
Не наївно, я використовував лише d3 та websockets для внутрішнього інструменту, де я працюю. D3 стосувався прив'язки даних до даних, отриманих з веб-розеток. Я також використовував d3 для управління кількома різними видами перегляду. Це був власний SPA. D3 може обробляти html елементи, а також SVG елементи. Не варто недооцінювати програміста. Ось чому Мережа мені прекрасна, багато способів зробити щось. Просто виберіть те, як вам найбільше подобається, воно залишається веселим.
jemiloii

10

d3 створений для візуалізації даних, він робить це шляхом фільтрації через DOM-об'єкти та застосування перетворень.

jQuery створений для маніпуляції з DOM та полегшує життя для багатьох основних завдань JS.

Якщо ви хочете перетворити дані в красиві, інтерактивні фотографії, D3 є приголомшливим.

Якщо ви хочете перемістити, маніпулювати чи змінювати іншу веб-сторінку, jQuery - це ваш інструмент.


7

Чудове запитання!

Хоча обидві бібліотеки мають багато однакових особливостей, мені здається, що найбільша різниця між jQuery і D3 - це фокус.

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

D3 орієнтований на дані (маніпулювання та візуалізація) та підтримує лише сучасні браузери. І хоча це виглядає як jQuery, користуватися ним набагато складніше.


3
jquery дотримується методології запису менше робити більше, d3 орієнтована на надання даних елементам документа. Є кілька причин, чому d3 важче: в одній він використовує необроблений javascript, а дві, деякі з необроблених JavaScript змінюються. Наприклад: Javascript forEach (значення, індекс, масив), в d3 forEach (індекс, значення, масив). Я не впевнений, чому вони обертають аргументи функції, саме те, що я бачив у джерелі. Я думаю, що ми могли б зробити d3 швидше, якби ми вчинили безглузді функції.
jemiloii

0

Обидва можуть вирішити одну і ту ж мету створення та маніпулювання DOM (будь то HTML або SVG). D3 покриває API, який спрощує загальні завдання, які ви б виконували під час генерації / маніпулювання DOM на основі даних. Це робиться завдяки власній підтримці прив’язки даних за допомогою функції data (). У jQuery вам доведеться вручну обробити дані та визначити, як зв’язати дані, щоб генерувати DOM. Через це ваш код стає більш процедурним і складніше міркувати та дотримуватися. У D3 - це менше кроків / кодів та більше декларативних. D3 також забезпечує деякі функції вищого рівня, які допомагають генерувати візуалізацію даних у SVG. Такі функції, як діапазон (), домен () та масштаб (), спрощують отримання даних та побудову їх на графіку. Такі функції, як ось (), також полегшують малювання загальних елементів інтерфейсу, яких ви очікували на графіку / графіку.

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