2010-12-03 13 views
25

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

+0

あなたは、どのMIMEタイプが指定されているか、またはjsonの使用について話していますか? – CodesInChaos

+0

。私はプレーンテキストのコンテンツタイプまたはアプリケーションのJSONコンテンツタイプを持つオブジェクトのjson表現を送ることができました。 – stevebot

+1

json自体はまだ実際にはプレーンテキストですが、コンテンツタイプとして「text/plain」ではなく「application/json」を明示的に選択する理由は誰にも分かりません。結局私は "application/html"や "application/css"を選んでいないのですか? – Gherman

答えて

22

構造化データの受け渡しにJSONとカスタム形式(MIMEタイプtext/plainを使用)を使用しているとします。

パフォーマンスはさまざまなコンポーネントに分解される可能性があります。例えば

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

理論的には、最適に設計され、実装されたカスタムフォーマットは、JSONよりも遅くも密度も低くないと言えるでしょう。 (実際のところ、実際のフォーマットと実際の実装のパフォーマンスを比較する必要があります。したがって、パフォーマンスは実際には、フォーマットとそれに関連するエンコード/デコードソフトウェアの設計と実装の仕事がいかに優れているかにかかっています。さらに、JSONの実装方法にも依存します。さまざまなパフォーマンス特性を備えたサーバー側JSONライブラリのほか、「ネイティブ」データ構造との間でデータをマッピングするさまざまな方法があります。

これは、JSON(およびXML)がカスタムフォーマットよりも優れている点です。

  • JSONとXMLを使用すると、コンテンツのエンコードとデコードを支援するために使用する主流言語で使用できるライブラリがあります。カスタムフォーマットでは、クライアント側とサーバー側で独自のエンコーディング/デコードをロールバックする必要があります。

  • JSONとXMLには、他の人がエンコーダ/デコーダを実装できるように整形式があるという標準があります。カスタムフォーマットでは、他の人があなたのフォーマットを実装できるようにするには、自分で仕様を記述する必要があります。

  • JSONとXMLには、charsetエンコーディングやデータに現れる「メタ」文字などの問題を処理する標準的な方法があります。習慣では、これらの問題を理解し解決する必要があります。 (そうしないと、トラックが難しくなる可能性があります)。

  • 簡単に変更できます。 JSON/XMLベースのフォーマットを進化させることは比較的簡単です。しかし、カスタムフォーマットでは、(少なくとも)より多くの作業が必要となり、設計の選択に応じて、それは非常に困難になる可能性があります。ほとんどのアプリケーションでは

、問題パフォーマンスよりもはるかにこれらの問題。そのため、JSONやXMLが広く使われています。

フォロー

しかし、どのような代わり場合は、私はカスタム実装を使用していないことを前提とし、MIMEタイプapplication/jsonのとプレーンテキスト/のMIMEタイプでJSONを送信して比較しますか?

そして、その答えは、それがほとんどないパフォーマンス違いということです。

  • MIMEタイプの文字列が短いため、HTTPリクエストまたはレスポンスヘッダーに6バイトを保存しますが、サイズが数千バイトの標準的なHTTPメッセージではそれほど重要ではありません。
  • "text/plain"コンテンツタイプを使用すると、要求メッセージまたは応答メッセージのエンコード/デコードに必要な作業と違いはありません.6バイトの追加/おそらく測定するには小さすぎます。

また、不正確なMIMEタイプを使用すると、(おそらく)HTTP仕様に違反している可能性があります。これを行う場合:

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

  • クライアントまたはサーバーがHTTPコンテンツタイプのネゴシエーションを中断することがあります。

は要するに、私はこれを行うには良い理由を考えることができ、そしていくつかの良い理由がそれをしません。

+0

しかし、私はカスタム実装を使用していないと仮定し、JSONをMIMEタイプのtext/plainとMIMEタイプapplication/jsonのものと比較するとどうでしょうか? – stevebot

+0

私は、Googleがオートコンプリートの提案をtxt形式のJSONとして提供していることに注目しました。彼らが何を得ているのだろうか – lfender6445

+0

おそらく、特定のブラウザがJSONを有害なコンテキストで「レンダリング」しない可能性があります。おそらく6バイトの節約は、何十億もの要求を乗算した場合に重要です。おそらく彼らはほとんど何も得ていない... –

10

JSonは基本的にプレーンテキストの形式です。このように、最高のプレーンテキスト形式よりも高速にすることはできません。 JSONは、エンコーディングとデコードを容易にし、複雑なもののような多くのタイプのデータでは人間が読みやすいという理由で使われています。

あなたが現在使用している代替手段を探しているなら、送信しているデータの詳細をいくつか与えることができます。代替案を提案することもできます。

+0

私は別の方法を探していません。あなたが言ったように、jsonはプレーンテキストの形式なので、プレーンテキストとして送ることができます。私はどちらかの練習がより効率的かどうか確信していません。 – stevebot

3

JSONエンジンの主要な最適化(Cコード)が原因で、JSONがおそらく高速化する可能性があります。たとえば、V8のJSON.parse()は非常に高速です。

4

JSONは最終的にxmlとともに広く受け入れられるフォーマットになります。 JSONの受け入れはかなり早く成長しているので、テキストを賢く選択して将来を念頭に置いています。

1

その他の利点JSON形式のJSon形式のjavascriptオブジェクト宣言は、より簡単で高速な解析を可能にします。

JSON文字列:{名前:値NAME2:値}

javascriptオブジェクトにtranform非常に簡単。

3

ここはjsonです。orgの説明(LOL)と私はもっと同意できませんでした:

JSON:あなたは、ほぼすべての言語のJSONライブラリがある見つけるXML

ここ

に無脂肪の代替。

http://www.json.org/

JSONはjqueryのhttp://api.jquery.com/jQuery.getJSON/ JSONがシリアライズとの 目的のために設計されていたので、私はJSON http://ascherconsulting.com/what/are/the/advantages/of/using/json/

について見つけた最良のテキストの

一つととても簡単です データのシリアル化を解除するとJavaScriptアプリケーションから が送信されるため、 のJSONを使用する利点は JSONの利点は、他の手段よりも のシリアル化です。最もよく知られている のデータをシリアライズする手段は、現在アプリケーション との間でXMLを送信しています。しかし、XMLは であり、むしろ厄介な手段の のシリアル化です。まず、送信者は 受信者が理解できるドキュメントタイプ定義に基づいて に基づいてシリアル化するデータをエンコードする必要があります。そうすることによって、 は、 DTDが使用されているかどうかにかかわらず、実際のデータの周りに大きな余分な詰め物 を作成します。したがって、XML 文書のサイズは、多くの場合、 の実際のセットと比べてかなり大きく、その中には という値が含まれています。次に、 の受信者は、 XMLのストリームを受信し、データを にデコードして、そのデータをメモリに格納する必要があります。 JSONの 構造は 種類の標準プログラミングデータの 構造を反映し、符号化機構が必要な文字 の のみ最小数を追加するため 比較して、送信者がJSONを使用してデータ のシリアライゼーションは比較的 迅速かつコンパクトであります構造体を示し、 データの値。受信者 はその後、JSONシリアライズされたデータ、 を受信すると、行うことが に必要処理のみを使用して 文字列のテキストを評価することであるいずれかのJavaScriptの 組み込みのeval関数または別の言語で互換性 機能。 他の標準比較はYAML、 です。これはDTD に依存せずに複雑な データセットをシリアル化することができ、 XMLよりも読み込みと書き込みの両方が簡単なパーサーが必要です。しかし、 でも、簡略化されたYAMLパーサーでさえ、 は一般により多くの時間を必要とし、 はJSONよりも大きいシリアル化されたデータを生成します。

関連する問題