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가 있으며 웹 표준을 기반으로하여 유사하게 보입니다.

다음 코드는 jQuery에서 불가능한 D3 사용의 예입니다 ( 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
TMG

59

d3에 어리석은 설명이 있습니다. jQuery와 d3는 전혀 유사하지 않으며 동일한 용도로 사용하지 않습니다.

jQuery의 목적은 일반적인 DOM 조작을 수행하는 것입니다. 당신이 원하는 모든 것을위한 범용 자바 스크립트 툴킷입니다.

d3는 주로 데이터로 반짝이는 그래프를 쉽게 만들 수 있도록 설계되었습니다. 데이터를 그래픽으로 시각화하려면 반드시 그것을 사용해야합니다 (또는 비슷한 것 또는 그 위에 구축 된 것).

모든 대화 형 양식 요구에 맞는 범용 JS 라이브러리를 원한다면 jQuery 또는 proto 또는 mootools를 고려하십시오. 작은 것을 원한다면 underscore.js를 고려하십시오. 의존성 주입 및 테스트 가능성을 원하는 경우 AngularJS를 고려하십시오.

일반 비교위키 백과 가이드.

누군가가 왜 비슷하다고 생각하는지 알 수 있습니다. 유사한 선택기 구문 인 $ ( 'SELECTOR')을 사용하며 d3는 특히 이러한 작업을 함께 연결하는 동안 html 요소를 선택, 필터링 및 작동하는 데 매우 강력한 도구입니다. d3는 범용 라이브러리라고 주장하여 홈페이지에서이를 설명하려고하지만, 사실 대부분의 사람들 은 그래프만들고 싶을 때 사용합니다 . d3 학습 곡선이 너무 가파르 기 때문에 평균 dom 조작에 사용하는 것은 매우 드문 경우입니다. 그러나 이것은 jQuery보다 훨씬 더 일반적인 도구이며 일반적으로 사람들은 직접 사용하는 대신 d3 위에 다른보다 구체적인 라이브러리 (예 : nvd3)를 빌드합니다.

@JohnS의 답변도 매우 좋습니다. Fluent API = 메소드 체인. 또한 플러그인 및 확장 프로그램이 라이브러리를 안내하는 위치에 대해서도 동의합니다.


1
@zcaudate, d3는 너무 전문적이기 때문에 링크에 없습니다. 이 링크는 일반적인 프레임 워크 만 비교합니다.
Case

1
제가 추가 할 다른 것은 D3가 SVG (Scalable Vector Graphics)를 생성한다는 것입니다. 크기가 쉽게 변경되고 다른 요소에 쉽게 비례하여 유지 될 수 있기 때문에 이것은 훌륭합니다. JQuery에서 동일한 작업을 수행 할 수 있지만 (OP의 예제 링크에 표시됨) 서로를 대체 할 수는 없습니다.
EnigmaRM 2013

2
둘 다 Sizzle에서 실행되고 동일한 선택기 (각 프레임 워크의 많은 부분)를 사용한다는 점에서 유사합니다. 그러나 선택 후에는 매우 다른 DOM 조작 객체를 구성합니다.
cchamberlain 2013

5
어리석은 설명에 +1. 나는 많은 클라이언트 측 라이브러리와 구성 요소를 조사했지만 완전히 잃어버린 느낌이 들기 전에 웹 사이트의 첫 번째 문장을 지나치지 않았습니다. 나는 '사물'의 화려한 난해한 육각형 모자이크를 클릭했고 그것은 나를 신비스럽고 무관 한 곳으로 데려 갔다. 나는 여기서 무슨 일이 일어나고 있는지 이해하지 못했기 때문에 나는 d3 클럽에 합당하지 않다고 생각합니다. 따라서 나는 줄어들고 서쪽으로 가서 d3가없는 상태로 남을 것입니다.
Jonathan Neufeld 2014 년

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"}

아하, d3의 .data ()가 jquery 에서처럼 작동하지 않는 이유가 궁금합니다. D3에서 설정해야 함.attr('data-hash', '654687867asaj')
프로토 타입 '

6
이것은 나쁜 비교입니다. .data()jQuery에서 기본적으로 html 속성에 액세스하기위한 바로 가기입니다 data-<custom-name>. 그러나 D3에서는 html 데이터 속성과 관련이 없으며 D3에서하는 일은 이미 선택된 요소와 함께 args로 전달 된 데이터의 결합으로 새로운 선택을 반환하는 것입니다.
nazikus

3
지금은 나쁜 비교이지만 2013 년에는 그렇게 나쁘지 않았습니다. 그 이후로 jQuery는 구형 브라우저 (데이터 속성 중 하나임)에 대한 많은 폴리 ​​필링을 삭제 한 반면 D3는 모 놀리 식 라이브러리가되는 것을 중단하고 대신 작은 특정 라이브러리 모음의 진입 점이되었습니다
ffflabs

11

D3는 단순한 시각적 그래프가 아닙니다. 데이터 기반 문서. d3를 사용하면 데이터를 dom 노드에 바인딩합니다. SVG 덕분에 그래프를 만들 수 있지만 D3는 훨씬 더 많습니다. Backbone, Angular 및 Ember와 같은 프레임 워크를 D3를 사용하여 대체 할 수 있습니다.

누가 아래로 투표했는지 확실하지 않지만 좀 더 명확하게 추가하겠습니다.

많은 웹 사이트가 일반적으로 데이터베이스에서 제공되는 서버에서 데이터를 요청합니다. 웹 사이트가이 데이터를 수신하면 새 콘텐츠의 페이지 업데이트를 수행해야합니다. 많은 프레임 워크가이를 수행하며 d3도이를 수행합니다. 따라서 svg 요소를 사용하는 대신 html 요소를 대신 사용할 수 있습니다. 다시 그리기를 호출하면 새 콘텐츠로 페이지가 빠르게 업데이트됩니다. jquery, backbone + 그 플러그인, angular 등과 같은 모든 추가 오버 헤드를 갖지 않는 것이 정말 좋습니다. d3 만 알면됩니다. 이제 d3에는 라우팅 시스템이 포함되어 있지 않습니다. 하지만 언제든지 찾을 수 있습니다.

반면에 Jquery는 코드를 적게 작성하는 것이 유일한 목적입니다. 많은 브라우저에서 테스트 된 자바 스크립트의 짧은 버전입니다. 웹 페이지에 jquery가 많지 않은 경우. 사용하기 좋은 라이브러리입니다. 간단하고 여러 브라우저를위한 자바 스크립트 개발에서 많은 수고를 덜어줍니다.

d3와 같은 방식으로 jquery를 구현하려고 시도하면 해당 작업을 위해 설계되지 않았기 때문에 매우 느릴 것입니다. 마찬가지로 d3는 데이터를 서버에 게시하도록 설계되지 않았으며 데이터를 소비하고 렌더링하도록 설계되었습니다. .


1
"... Backbone, Angular 및 Ember와 같은 프레임 워크를 D3를 사용하여 교체합니다." 자세히 설명 할 수 있습니까?
Billy Moon

내 경험을 통해 많은 사람들이 이러한 프레임 워크를 사용하여 차트와 그래프를 렌더링하고 d3로 대체 할 수있는 것을 보았습니다. 원하는 경우 데이터를 요소에 바인딩하기 때문에 페이지에서 d3 렌더링 데이터를 가질 수도 있습니다. D3는 jQuery보다 더 빠르게 대규모 데이터 세트로 작업 할 수 있습니다.
jemiloii

누가 나를 비판했는지는 모르겠지만 댓글을 남길 수 있으면 좋겠다. D3는 데이터 기반 문서 용입니다. 차트 뿐만이 아닙니다.
jemiloii

d3로 쉽게 재사용 가능한 구성 요소를 만들 수 있습니다. bost.ocks.org/mike/chart
jemiloii

2
순진하지 않고 내가 일하는 내부 도구로 d3와 웹 소켓 만 사용했습니다. D3는 웹 소켓에서 검색된 데이터의 데이터 바인딩을 처리했습니다. 또한 d3를 사용하여 몇 가지 다른 뷰를 관리했습니다. 그것은 자체 SPA였습니다. D3는 html 요소와 svg 요소를 처리 할 수 ​​있습니다. 프로그래머를 과소 평가해서는 안됩니다. 이것이 웹이 나에게 아름다운 이유이고, 같은 일을하는 여러 가지 방법입니다. 가장 좋아하는 방식을 선택하면 재미있게 유지됩니다.
jemiloii

10

d3는 데이터 시각화를 위해 만들어졌으며 DOM 개체를 통해 필터링하고 변환을 적용하여이를 수행합니다.

jQuery는 DOM 조작을 위해 만들어졌으며 많은 기본 JS 작업을 더 쉽게 만듭니다.

데이터를 예쁘고 인터랙티브 한 그림으로 바꾸려는 경우 D3는 대단합니다.

웹 페이지를 이동, 조작 또는 수정하려는 경우 jQuery가 도구입니다.


7

좋은 질문입니다!

두 라이브러리 모두 동일한 기능을 많이 공유하지만 jQuery와 D3의 가장 큰 차이점은 초점입니다.

jQuery는 브라우저 간 사용 및 사용 편의성에 중점을 둔 범용 라이브러리입니다.

D3는 데이터 (조작 및 시각화)에 중점을두고 있으며 최신 브라우저 만 지원합니다. 그리고 jQuery처럼 보이지만 사용하기가 훨씬 더 어렵습니다.


3
jquery는 write less do more 방법론을 따르며, d3는 문서 요소에 데이터를 렌더링하는 데 중점을 둡니다. d3가 더 어려운 데에는 몇 가지 이유가 있습니다. 하나는 원시 자바 스크립트를 사용하고 두 번째는 원시 자바 스크립트 중 일부가 변경되었습니다. 예 : Javascript forEach (value, index, array), in d3 forEach (index, value, array). 왜 그들이 함수 인수를 뒤집는 지 모르겠습니다. 내가 소스에서 본 것뿐입니다. 무의미한 기능을 사용하지 않으면 d3를 더 빠르게 만들 수있을 것 같습니다.
jemiloii

0

둘 다 (HTML이든 SVG이든) DOM을 만들고 조작하는 동일한 목적을 해결할 수 있습니다. D3는 데이터를 기반으로 DOM을 생성 / 조작 할 때 수행하는 일반적인 작업을 단순화하는 API를 표시합니다. 이는 data () 함수를 통한 데이터 바인딩에 대한 기본 지원을 통해 수행됩니다. jQuery에서는 DOM을 생성하기 위해 데이터를 수동으로 처리하고 데이터에 바인딩하는 방법을 정의해야합니다. 이로 인해 코드가 더 절차 적이며 추론하고 따르기가 더 어려워집니다. D3를 사용하면 단계 / 코드가 적고 선언적입니다. D3는 또한 SVG에서 데이터 시각화를 생성하는 데 도움이되는 몇 가지 고급 기능을 제공합니다. range (), domain () 및 scale ()과 같은 함수를 사용하면 데이터를 가져 와서 그래프에 그리는 것이 더 쉽습니다. 또한 axis ()와 같은 함수를 사용하면 차트 / 그래프에서 예상 할 수있는 일반적인 UI 요소를 더 쉽게 그릴 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.