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はWebアプリの作成に使用されます。D3には多くのデータ視覚化拡張機能があり、jQueryには多くのWebアプリプラグインがあります。

  • どちらもJavaScript DOM操作ライブラリであり、CSSセレクターと流暢なAPIを備えており、Web標準に基づいているため、似たような外観になっています。

以下のコードは、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
1つの例は1000語以上の価値があります
TMG

59

d3にはばかげた説明があります。jQueryとd3はまったく似ていません。同じものに使用しないでください。

jQueryの目的は、一般的なdom操作を行うことです。それはあなたがしたいかもしれない何かのための汎用のjavascriptツールキットです。

d3は主に、データを含む光沢のあるグラフを簡単に作成できるように設計されています。データを視覚的に視覚化したい場合は、必ずそれ(または類似のもの、あるいはその上に構築されたもの)を使用する必要があります。

インタラクティブなフォームのすべてのニーズに対応する汎用JSライブラリが必要な場合は、jQuery、proto、またはmootoolsを検討してください。小さなものが必要な場合は、underscore.jsを検討してください。依存性注入とテスト容易性のあるものが必要な場合は、AngularJSを検討してください。

一般的な比較ウィキペディアからガイド。

誰かが似ていると思う理由がわかります。それらは同様のセレクター構文-$( 'SELECTOR')を使用します。d3は、特にこれらの操作を連鎖させながら、html要素を選択、フィルタリング、および操作するための非常に強力なツールです。d3は、汎用ライブラリであると主張することにより、ホームページでこれを説明しようとしますが、実際には、ほとんどの人がグラフ作成するときに使用します。d3の学習曲線は非常に急勾配であるため、平均的なdom操作に使用するのはかなり珍しいことです。ただし、これはjQueryよりもはるかに一般的なツールであり、一般的に人々は直接使用するのではなく、d3の上に他のより具体的なライブラリ(nvd3など)を構築します。

@JohnSの答えもとても良いです。Fluent API =メソッドの連鎖。また、プラグインと拡張機能がライブラリをどこに導くかについても同意します。


1
@ zcaudate、d3は非常に特殊化されているため、リンク上にありません。そのリンクは一般的なフレームワークのみを比較します。
ケース

1
追加するもう1つのことは、D3がSVG(Scalable Vector Graphics)を作成することです。物事は簡単にサイズを変更でき、他の要素との比率を維持しやすいため、これは素晴らしいことです。JQueryで同じことを実行できる場合がありますが(OPのリンク例に示されているように)、それらは相互に置き換えることを意図したものではありません。
EnigmaRM 2013

2
どちらもSizzleで実行され、同じセレクター(各フレームワークの巨大な部分)を使用するという点で似ています。ただし、選択後、非常に異なるDOM操作オブジェクトが作成されます。
チェンバレン2013年

5
+1はばかげた説明です。私は多くのクライアント側のライブラリとコンポーネントを研究していますが、完全に失われる前に、彼らのウェブサイトの最初の文を通り抜けることができませんでした。「もの」の派手で難解な六角形のモザイクをクリックすると、どこか神秘的で無関係なところに行きました。ここで何が起こっているのかを理解できていないので、私はd3クラブに値しないと思います。そのため、私は衰退し、西洋に行き、d3を失います。
ジョナサンノイフェルト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は古いブラウザー(データ属性はそのうちの1つ)の多くのポリフィリングを削除し、D3はモノリシックライブラリーではなくなり、代わりに小さな特定のライブラリーのコレクションの
エントリー

11

D3は視覚的なグラフだけではありません。データ駆動型ドキュメント。d3を使用する場合、データをdomノードにバインドします。SVGのおかげでグラフを作成することができますが、D3はそれだけではありません。D3を使用すると、Backbone、Angular、Emberなどのフレームワークを置き換えることができます。

誰が反対票を投じたのかはわかりませんが、もう少し明確にしてみましょう。

多くのWebサイトは、サーバーからのデータを要求します。サーバーは通常、データベースからのものです。ウェブサイトがこのデータを受け取ったら、新しいコンテンツのページを更新する必要があります。多くのフレームワークがこれを行い、d3もこれを行います。したがって、svg要素を使用する代わりに、html要素を使用できます。再描画を呼び出すと、新しいコンテンツでページがすぐに更新されます。jquery、バックボーン+そのプラグイン、angularなどの余分なオーバーヘッドをすべて持たないのは本当に素晴らしいことです。必要なのはd3だけです。現在、d3にはルーティングシステムが組み込まれていません。しかし、いつでも見つけることができます。

一方、jqueryの唯一の目的は、より少ないコードを記述することです。これは、多くのブラウザでテストされているJavaScriptの短縮版です。Webページにjqueryがたくさんない場合。使用するのに最適なライブラリです。それはシンプルで、複数のブラウザーでのJavaScript開発から多くの苦痛を取り除きます。

jqueryをd3のような方法で実装しようとした場合、それはそのタスク用に設計されていないため、非常に遅くなります。同様に、d3はサーバーにデータをポストするように設計されていません。 。


1
「... D3を使用して、Backbone、Angular、Emberなどのフレームワークを置き換えます。」詳しく説明できますか?
ビリームーン

私の経験から、多くの人々がこれらのフレームワークを使用して、チャートやグラフをレンダリングするときに、それらをd3に置き換えることができるのを見てきました。必要に応じて、データを要素にバインドするため、ページ上にd3レンダリングデータを持つこともできます。D3は、jQueryよりも高速に大規模なデータセットを処理できます。
jemiloii 2015年

誰が私に反対票を投じたのかはわかりませんが、コメントを残してほしいと思います。D3はデータ駆動型ドキュメント用です。チャートだけではありません。
jemiloii 2015年

d3を使用すると、再利用可能なコンポーネントを簡単に構築できます。bost.ocks.org/mike/chart
jemiloii 2015

2
世間知らずではなく、私が作業する内部ツールにはd3とWebSocketのみを使用しました。D3は、WebSocketから取得したデータからのデータバインディングを処理しました。また、d3を使用していくつかの異なるビューを管理しました。それはそれ自身のSPAでした。D3はhtml要素とsvg要素を処理できます。プログラマを過小評価しないでください。これがウェブが私にとって美しい理由であり、同じことを行う多くの方法があります。楽しむ方法を選ぶだけで、楽しいままです。
jemiloii 2016

10

d3はデータの視覚化のために作成され、DOMオブジェクトをフィルタリングして変換を適用することでこれを実現します。

jQueryはDOM操作用に作成されており、多くの基本的なJSタスクを簡単に実行できます。

データをきれいでインタラクティブな画像に変換したい場合は、D3が最適です。

Webページを移動、操作、または変更する場合は、jQueryがツールです。


7

すばらしい質問です。

どちらのライブラリも同じ機能の多くを共有していますが、jQueryとD3の最大の違いが焦点であるように思えます。

jQueryは、クロスブラウザであり、使いやすいことに重点を置いた汎用ライブラリです。

D3はデータ(操作と視覚化)に重点を置いており、最新のブラウザーのみをサポートしています。また、jQueryのように見えますが、使用するのははるかに困難です。


3
jqueryは、より少ない書き込みより多くの方法論に従い、d3はデータをドキュメント要素にレンダリングすることに焦点を当てています。d3が難しい理由はいくつかあります。1つは未加工のJavaScriptを使用すること、2つは未加工のJavaScriptの一部が変更されることです。例:JavaScript forEach(value、index、array)、in d3 forEach(index、value、array)。なぜそれらが関数の引数を逆にするのかはわかりませんが、ソースで見ただけです。無意味な関数を取り除いたら、d3をより高速にできると思います。
jemiloii 2015年

0

どちらも、DOMの作成と操作という同じ目的(HTMLでもSVGでも)を解決できます。D3は、データに基づいてDOMを生成/操作するときに行う一般的なタスクを簡略化するAPIを提供します。これは、data()関数によるデータバインディングのネイティブサポートを通じて行われます。jQueryでは、DOMを生成するために、データを手動で処理し、データにバインドする方法を定義する必要があります。このため、コードは手続き型になり、推論や追跡が難しくなります。D3を使用すると、ステップ/コードが少なくなり、宣言性が高まります。D3は、SVGでのデータ視覚化の生成を支援するいくつかの上位レベルの関数も提供します。range()、domain()、scale()などの関数を使用すると、データを取得してグラフにプロットするのが簡単になります。axis()などの関数を使用すると、チャート/グラフで期待する一般的なUI要素を簡単に描画できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.