web-dev-qa-db-ja.com

text / plainよりもapplication / jsonを使用する利点は?

コンテンツタイプapplication/jsonを使用して、text/plainを介してjsonにシリアル化されたオブジェクトを送信することのパフォーマンス上の利点はありますか?多くのフレームワーク(Springなど)がコンテンツタイプに基づいてデータをマップおよびシリアル化できることは知っていますが、一般に、このプロセスは非常に簡単で、JSONオブジェクトのtext/plainよりもapplication/jsonを使用するのは説得力のある理由ではありません。 。

30
stevebot

構造化データを渡すために、JSONとカスタム形式(MIMEタイプtext/plainを使用)の使用について話しているとしましょう。

パフォーマンスはさまざまなコンポーネントに分類できます。例えば.

  • コンテンツをフォーマットにエンコードするのに要した相対時間
  • 元のコンテンツを取得するためにフォーマットをデコードするのに要した相対時間
  • エンコードされたコンテンツの相対的なサイズ。

理論的には、仮想フォーマットで最適に設計および実装されたカスタムフォーマットは、JSONよりも遅くない、またはJSONよりも密度が低いとは言えません。 (「証明」は明らかです。JSONの最適な実装を選択し、パフォーマンスに影響を与えない形式にいくつかの小さな変更を加えます。)

しかし実際には、実際のフォーマットと実際の実装のパフォーマンスを比較する必要があります。したがって、答えは、パフォーマンスは実際には、フォーマットとそれに関連するエンコード/デコードソフトウェアを設計および実装する上でどれだけ優れた仕事をするかにかかっているということです。さらに、JSONの実装方法にも依存します。さまざまなパフォーマンス特性を備えたサーバー側JSONライブラリが多数あり、データを「ネイティブ」データ構造に/からマッピングするさまざまな方法があります。

これにより、カスタム形式に対するJSON(およびXML)の真の利点がもたらされます。

  • JSONとXMLを使用すると、コンテンツのエンコードとデコードを支援するために使用することを選択した任意の主流言語で使用できるライブラリがあります。カスタム形式では、クライアント側とサーバー側で独自のエンコード/デコードを行う必要があります。

  • JSONとXMLを使用すると、他の人がエンコーダー/デコーダーを実装できるようにする整形式を規定する標準があります。カスタム形式では、他の人が自分の形式を実装できるようにしたい場合は、自分で仕様を作成する必要があります。

  • JSONとXMLには、データに表示される文字セットエンコーディングや「メタ」文字などの問題に対処する標準的な方法があります。カスタムでは、これらの問題を理解し、自分自身で対処する必要があります。 (そうしないと、トラックをたどるのが困難になる可能性があります。)

  • 変更のしやすさ。 JSON/XMLベースのフォーマットを進化させるのは比較的簡単なことです。しかし、カスタム形式を使用すると、(少なくとも)やらなければならない作業が増え、設計の選択によっては、非常に難しい場合があります。

ほとんどのアプリケーションでは、これらの問題はパフォーマンスよりもはるかに重要です。そして、それがJSONまたはXMLが広く使用されている理由です。

[〜#〜]フォローアップ[〜#〜]

しかし、代わりに、カスタム実装を使用していないと想定し、JSONの送信をtext/plainのMIMEタイプとMIMEタイプapplication/jsonのそれと比較するとどうなるでしょうか。

次に、答えはほとんどないパフォーマンスの違いを生み出すことです。

  • MIMEタイプの文字列が短いため、HTTP要求または応答ヘッダーに6バイトを節約できますが、これは、サイズが数千バイトで測定される一般的なHTTPメッセージでは重要ではありません。
  • 「text/plain」コンテンツタイプを使用しても、要求または応答メッセージをエンコード/デコードするために実行する必要がある作業に違いはありません...おそらく小さすぎる6バイトを比較/コピーするのにかかる時間は別です測定する。

さらに、不正確なMIMEタイプを使用すると、(間違いなく)HTTP仕様に違反します。これを行う場合:

  • 受信者が応答を誤って処理する可能性が高くなります。例えばデコードに失敗するか、ブラウザウィンドウに表示されます。

  • クライアントまたはサーバーがHTTPコンテンツタイプネゴシエーションを使用すると想定して、HTTPコンテンツタイプネゴシエーションを解除することができます。

要するに、私はこれを行うgood理由はないと考え、いくつかgoodしない理由。

25
Stephen C

JSonは基本的にプレーンテキストのフォーマットです。そのため、最高のプレーンテキスト形式よりも速くなることはできません。 (不適切に選択されたプレーンテキスト形式よりも高速である可能性があります)JSonを使用すると、エンコードとデコードが容易になり、複雑なデータなど、多くのタイプのデータをかなり人間が読めるようになります。

現在使用している代替手段を探している場合は、送信するデータの詳細をもう少し教えていただければ、代替案を提案できます。

11
Peter Lawrey

JSONは最終的にxmlとともに広く受け入れられる形式になります。 JSONの採用は急速に拡大しており、将来を念頭に置いて、テキストよりも賢い選択肢となっています。

ここにjson.orgの説明があります(笑)そして私はこれ以上同意できませんでした:

JSON:XMLの無脂肪代替

ここには、ほとんどすべての言語用のJsonライブラリがあります。

http://www.json.org/

JsonはJqueryでとても簡単 http://api.jquery.com/jQuery.getJSON/

Jsonについて私が見つけた最高のテキストの1つ http://ascherconsulting.com/what/are/the/advantages/of/using/json/

JSONは、JavaScriptアプリケーションとの間で送受信されるデータをシリアル化およびシリアル化解除することを目的として設計されているため、JSONを使用する利点は、他のシリアル化手段に対するJSONの利点に関連しています。現在、アプリケーションとの間で送受信するデータをシリアル化する最もよく知られた手段はXMLです。しかし、XMLはシリアライズのかなり厄介な手段です。まず、送信者は、受信者が理解できるドキュメントタイプ定義に基づいて、シリアル化するデータをエンコードする必要があります。これを行うと、どのDTDを使用しても、実際のデータの周囲に多くの余分なパディングが作成されます。そのため、XMLドキュメントのサイズは、実際に含まれる値のセットと比較してかなり大きいことがよくあります。次に、受信者はXMLのストリームを受信し、データをデコードしてメモリに格納する必要があります。比較すると、JSONを使用したデータのシリアル化は、JSONの構造が標準のプログラミングデータ型の構造を反映し、エンコードメカニズムによって、データ。受信者がJSONシリアル化されたデータを受信すると、JavaScriptの組み込みeval関数または別の言語の互換関数を使用して、文字列のテキストを評価するだけで処理を実行できます。もう1つの標準比較はYAMLです。これは、DTDに依存せずに複雑なデータセットをシリアル化でき、XMLよりも読み取りと書き込みの両方が簡単なパーサーが必要です。ただし、単純化されたYAMLパーサーでさえ、一般的にはJSONよりも時間がかかり、シリアル化された大きなデータストリームを生成します。

5
Ives.me

JSON-engineの大幅な最適化(Cコード)により、JSONはおそらく高速になるでしょう。たとえば、V8のJSON.parse()は非常に高速です。

4
Alfred

他の利点から、JSon形式の文字列は、JavaScriptオブジェクトの宣言に似ているため、解析がより簡単で高速になります。

JSon文字列:{name:value name2:value}

JavaScriptオブジェクトに非常に簡単に変換できます。

2
Soundpin