在text/plain上使用application/json的优点?

ste*_*bot 29 javascript java json httpwebrequest

使用内容类型application/json发送序列化为json over text/plain的对象是否有任何性能优势?我知道很多框架(比如Spring)可以根据内容类型对数据进行映射和序列化,但总的来说,我发现这个过程非常简单,因此对于JSON对象使用application/json over text/plain不是一个令人信服的理由.

Ste*_*n C 25

假设您正在讨论使用JSON与自定义格式(使用MIME类型text/plain)来传递结构化数据.

性能可以分解为不同的组件; 例如

  • 将内容编码为格式所需的相对时间,
  • 解码格式以获得原始内容所需的相对时间,以及
  • 编码内容的相对大小.

从理论上讲,我们可以说假设的最佳设计和实现的自定义格式将不会比JSON更慢或更密集.("证明"很明显.选择JSON的最佳实现,并对不影响性能的格式进行一些小改动.)

但实际上,您必须比较实际格式和实际实现的性能.答案因此,性能实际上取决于您设计和实现格式及其相关编码/解码软件的工作有多好.此外,它还取决于您如何实现JSON.有许多服务器端JSON库具有不同的性能特征,以及将数据映射到"本机"数据结构的不同方式.

这让我们了解了JSON(和XML)相对于自定义格式的真正优势.

  • 使用JSON和XML,您可以选择用于帮助编码和解码内容的任何主流语言的库.使用自定义格式,您必须为客户端和服务器端滚动自己的编码/解码.

  • 使用JSON和XML,有一些标准可以说明结构良好,允许其他人实现编码器/解码器.使用自定义格式,如果您希望其他人能够实现您的格式,您必须自己编写规范.

  • JSON和XML具有处理charset编码和出现在数据中的"meta"字符等问题的标准方法.有了自定义,您必须了解并解决这些问题.(如果你不这样做,你可能会遇到困难.)

  • 易于改变.演变基于JSON/XML的格式是一件相对简单的事情.但是使用自定义格式,您(至少)需要做更多的工作,并且根据您的设计选择,这可能非常困难.

对于大多数应用程序而言,这些问题远不止性能.这就是JSON或XML被广泛使用的原因.

跟进

但是如果相反你假设我没有使用自定义实现并将mSON类型的text/plain发送到mime类型application/json?

然后答案是它几乎没有 性能差异.

  • 您在HTTP请求或响应头中保存了6个字节,因为mime类型字符串较短,但对于大小以千位字节为单位的典型HTTP消息,这是无关紧要的.
  • 使用"text/plain"内容类型对于对请求或响应消息进行编码/解码所需的工作没有任何区别...除了比较/复制6个额外字节所花费的时间,这可能太小了测量.

此外,使用不准确的MIME类型(可以说)违反了HTTP规范.如果你这样做:

  • 接收器更可能错误地处理响应; 例如,无法对其进行解码,或在浏览器窗口中显示,以及

  • 假设您的客户端或服务器使用它,您可能会破坏HTTP内容类型协商.

简而言之,我认为没有充分理由这样做,并且有一些很好的理由不去做.


Pet*_*rey 11

JSon基本上是纯文本格式.因此,它不能比最好的纯文本格式更快.(它可能比选择不当的纯文本格式更快)使用JSon因为它使编码和解码更容易,并且对于许多类型的数据(尤其是复杂的数据)而言是相当人类可读的.

如果您正在寻找您现在使用的替代方案,也许您可​​以提供有关您正在发送的数据的更多详细信息,我们可以提供替代方案.


Van*_*ran 5

JSON最终将与xml一起成为广泛接受的格式。JSON的接受度正在迅速增长,这使其成为选择文本的明智选择,同时牢记未来。


Ive*_*.me 5

这是json.org description(LOL),我完全同意:

JSON:XML的免费替代品

在这里,您可以找到几乎所有语言的Json库。

http://www.json.org/

使用Jquery http://api.jquery.com/jQuery.getJSON/,Json非常容易

我发现有关Json的最好的文章之一http://ascherconsulting.com/what/are/the/advantages/of/using/json/

因为JSON的目的是对从JavaScript应用程序发送和接收的数据进行序列化和反序列化,所以使用JSON的优势与JSON相比其他序列化方式的优势有关。当前,最著名的序列化数据以进行与应用程序之间的传输的方法是XML。但是,XML是一种相当麻烦的序列化方法。首先,发送者必须根据接收者理解的文档类型定义对要序列化的数据进行编码。不管使用哪种DTD,这样做都会在实际数据周围产生大量额外的填充。因此,与XML文档包含的实际值集相比,XML文档的大小通常会很大。第二,接收者必须接收XML流并解码数据,然后才能将该数据放入内存。相比之下,由于JSON的结构反映了标准编程数据类型的结构,并且编码机制仅添加了最少数量的字符来指示JSON的结构和值,因此发送方使用JSON进行数据序列化相对较快且紧凑。数据。一旦接收者接收到JSON序列化数据,那么唯一需要做的处理就是使用JavaScript的内置eval函数或另一种语言的兼容函数来评估字符串的文本。另一个标准比较是YAML,它能够在不依赖DTD的情况下序列化复杂的数据集,并且需要比XML更简单的解析器来进行读写。但是,即使是简化的YAML解析器,通常也比JSON需要更多的时间并生成更大的序列化数据流。