どちらが速いか知りたい:XMLとJSON?いつ使用するのですか?
どちらが速いか知りたい:XMLとJSON?いつ使用するのですか?
回答:
どちらを使用するかについて答える前に、少し背景:
編集:この比較は、JavaScriptを使用するブラウザーで実際に使用するという観点からのものであることを言及しておきます。それはどちらのデータ形式も使用する必要がある方法ではなく、詳細を変更して私が言っていることを完全に無効にする多くの優れたパーサーがあります。
JSONはよりコンパクトであり、(私の見解では)より読みやすくなっています。伝送では、転送されるデータが少ないため、「高速」になります。
構文解析では、パーサーによって異なります。コード(JSONまたはXML)をデータ構造(マップなど)に変換するパーサーは、XMLの厳密な性質から恩恵を受ける可能性があります(XMLスキーマはデータ構造を明確に区別します)-ただし、JSONではアイテムのタイプ(String / Number / Nested JSON Object)は構文的に推測できます。例:
myJSON = {"age" : 12,
"name" : "Danielle"}
パーサーは、それが12
数値を表すことを認識するために十分にインテリジェントである必要はありません(Danielle
他の文字列と同じです)。したがって、JavaScriptでは次のことができます。
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
XMLでは、次のようにする必要があります。
<person>
<age>12</age>
<name>Danielle</name>
</person>
(余談ですが、これはXMLがかなり冗長であるという点を示しています。データ転送の問題です)。このデータを使用するには、パーサーを介して実行し、次のようなものを呼び出す必要があります。
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
実際、優れたパーサーはを入力するのが適切age
です(一方、そうしたくない場合もあります)。このデータにアクセスすると、上記のJSONの例のように属性ルックアップを実行するのではなく、キーでマップルックアップを実行しますname
。次のようにXMLを作成する方が直感的です。
<person name="Danielle" age="12" />
ただし、データにアクセスするには、マップルックアップを実行する必要があります。
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
編集:オリジナル:
ほとんどのプログラミング言語(すべてではなく、あらゆるストレッチによって)では、このようなマップルックアップは、属性のルックアップ(JSONを解析したときに取得したような)よりもコストがかかります。
これは誤解を招く可能性があります。JavaScript(およびその他の動的言語)では、マップルックアップとフィールドルックアップの間に違いがないことに注意してください。実際、フィールドルックアップは単なるマップルックアップです。
本当に価値のある比較が必要な場合は、それをベンチマークするのが最善です。データを使用する予定のコンテキストでベンチマークを実行してください。
私が入力している間、Felix Klingはそれぞれをいつ使用するかという点でそれらを比較するかなり簡潔な回答をすでに提示しているので、これ以上は説明しません。
FasterはJSONやXMLの属性ではなく、それらを比較することで得られる結果でもありません。もしあれば、それはパーサーの属性またはデータを送信する際の帯域幅です。
JSONとXMLの長所と短所のリスト(冒頭)は次のとおりです。
プロ:
短所:
単純な構文。少数の異なるデータ型のみがサポートされています。
コメントはサポートされていません。
プロ:
短所:
したがって、最終的には何が必要かを決定する必要があります。明らかに、両方のフォーマットには正当なユースケースがあります。ほとんどJavaScriptを使用する場合は、JSONを使用する必要があります。
長所と短所を自由に追加してください。私はXMLのエキスパートではありません;)
id
属性をドキュメント内で一意にすることでこれを行います。
処理速度だけが関連する問題ではないかもしれませんが、それが問題なので、ベンチマークのいくつかの数値を次に示します。速度については、この単純なベンチマークでは、XMLはJSONに比べて21%のオーバーヘッドを示しています。
記事で述べているように、冗長性に関する重要な注意点は、最も一般的な不満です。これは、たとえ問題であっても、実際にはそれほど関係ありません(XMLデータもJSONデータも通常人間ではなくマシンによって処理されます)。速度、それは圧縮するためにいくつかの合理的なより多くの時間を必要とします。
また、このベンチマークでは、大量のデータが処理され、通常のWebアプリケーションはそのようなサイズ(90 MBなど)のデータチャンクを送信しません。また、圧縮が効果的でない場合があります(十分に小さいデータチャンク、圧縮されたチャンクの場合)。は圧縮されていないチャンクよりも大きいため)該当しません。
それでも、圧縮が含まれていない場合、特に古典的なHTTPオーバーヘッドがないためにJSONの利点がさらに大きくなるWebSocket接続を介して送信される場合、JSONは明らかにより簡潔であるが、伝送チャネルでの重みが少なくなります。重要です。
送信後、データが消費され、これは全体の処理時間に含まれます。十分な大きさまたは複雑なデータが送信される場合、検証するXMLパーサーによって自動的にチェックされるスキーマがないため、JSONデータをさらにチェックする必要がある場合があります。これらのチェックはJavaScriptで実行する必要がありますが、特に高速であるとはわかっていません。そのため、このような場合、XMLよりもオーバーヘッドが増える可能性があります。
とにかく、テストだけが特定のユースケースの答えを提供します(速度が本当に唯一の問題であり、標準でも安全でも完全性でもない場合...)。
更新1:言及する価値があるのは、Gzipを使用するよりも低コストで圧縮を提供するEXI、つまり、圧縮されたXMLを解凍するために必要な処理を保存するEXIです。EXIはXMLに対するものであり、BSONはJSONに対するものです。空間と時間の両方での効率に関するいくつかの参照とともに、ここに簡単な概要があります:EXI:最後のバイナリ標準?。
更新2:W3Cが実施したバイナリXMLパフォーマンスレポートも存在します。これは、効率性と低メモリおよびCPUフットプリントもXML領域の問題であるため、効率的なXML交換評価です。
このコンテキストで注目すべき価値は、HTTPオーバーヘッドが問題として発生したためです。IANAは、EXIエンコーディング(上記の効率的なバイナリXML)をHTTPプロトコルのコンテンツコーディングとして(compress、deflate、およびgzipとともに)登録しています。 。これは、EXIが、他のHTTPクライアントの間でブラウザーによって理解されることが期待できるオプションであることを意味します。Hypertext Transfer Protocol Parameters(iana.org)を参照してください。
私が見つかりました。デジタルバザーでこの記事は本当に面白いです。Normからの彼らの引用を引用すると:
JSONプロについて:
渡したいものがすべてアトミック値、リスト、またはアトミック値のハッシュである場合、JSONにはXMLの多くの利点があります。インターネット上で直接使用でき、さまざまなアプリケーションをサポートし、JSONを処理するプログラムを簡単に記述できます。オプションの機能はほとんどなく、人間が判読可能でかなり明確であり、そのデザインは正式で簡潔であり、JSONドキュメントは簡単に作成でき、Unicodeを使用しています。...
XMLプロについて:
XMLは、構造化されていないデータの豊富さを非常にうまく処理します。Web APIデザイナーの幹部がXMLの死を喜んで祝ったとしても、XMLの将来についてはまったく心配していません。
そして、「私はあなたにそう言った!」私の机にトークンを置きます。より豊かなAPIを開発するように求められたときにJSON関係者が何をするのかを楽しみにしています。あまり構造化されていないデータを交換したい場合、JSONに変換しますか?JSONのスキーマ言語についての言及がときどき見られますが、他の言語もフォローしますか?...
私はノルムに個人的に同意します。XMLに対するほとんどの攻撃は、一般的なアプリケーションのWeb開発者からのものであり、統合開発者からのものではないと思います。しかし、それは私の意見です!;)
{ "foo": 42 }
そのオブジェクトはどのタイプですか?次に、タイプの欠如を修正するために、次のようなものが表示されます{ "__type": "Bar", "foo": 42 }
。対照的に、XMLでは、タイプは要素名に関連付けることができます:<Bar><foo>42</foo></Bar>
。jsonのようなlispとjavascriptの人のみ;)
XML(拡張マークアップ言語)はXHRでよく使用されます。これは、これが標準のブロードキャスト言語であり、あらゆるプログラミング言語で使用でき、サーバー側とクライアント側の両方でサポートされるため、これが最も柔軟なソリューションです。XMLをより多くの部分に分割できるため、指定されたグループは、他の部分に影響を与えることなくプログラムの一部を開発できます。XML形式は、XML DTDまたはXMLスキーマ(XSL)でも決定でき、テストできます。
JSONはデータ交換形式であり、JavaScriptアプリケーションの可能な形式として人気が高まっています。基本的に、これはオブジェクト表記配列です。JSONの構文は非常に単純なので、簡単に学習できます。また、JavaScriptは、eval
関数を使用したJSONの解析をサポートしています。一方、このeval
関数にはネガティブがあります。たとえば、プログラムはJSONの解析が非常に遅くなる可能性があり、セキュリティのためにeval
非常に危険な場合があります。これは、JSONが良くないことを意味するのではなく、もっと注意する必要があります。
私の提案では、ゲームのような軽いデータ交換を伴うアプリケーションにはJSONを使用するべきです。データ処理について本当に気にする必要がないため、これは非常にシンプルで高速です。
XMLは、ショッピングサイトなど、より大きなWebサイトに最適です。XMLはより安全で明確にすることができます。基本的なデータ構造とスキーマを作成して、修正を簡単にテストし、簡単にパーツに分割できます。
速度とセキュリティのためにXMLを使用することをお勧めしますが、軽量のものにはJSONを使用してください。
JSONの重要なことは、セキュリティ上の理由からデータ転送を暗号化しておくことです。JSONがXMLよりもはるかに高速であることは間違いありません。XMLは100ミリ秒かかりましたが、JSONは60ミリ秒しかかかりませんでした。JSONデータは操作が簡単です。