使用application / json优于text / plain的优势? [关闭]
收藏

使用内容类型application / json通过文本/纯文本发送序列化为json的对象有什么性能优势?我知道许多框架(例如Spring)都可以根据内容类型映射和序列化数据,但是总的来说,我发现此过程非常简单,因此对于在JSON对象上使用application / json而不是text / plain的应用,这并不是一个令人信服的理由。 。

最佳答案

Let's assume that you are talking about using JSON versus a custom format (using MIME type text/plain) for passing structured data.

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

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

从理论上讲,我们可以说,一种假设性的最佳设计和实现的自定义格式不会比JSON慢或少。 (“证明”是显而易见的。选择JSON的最佳实现,并在不影响性能的格式上进行一些细微更改。)

但实际上,您必须比较实际格式和实际实现的性能。因此,性能的答案实际上取决于您在设计和实现格式及其相关的编码/解码软件方面做得如何。此外,这还取决于您如何实现JSON。有许多具有不同性能特征的服务器端JSON库,以及从/到“本地”数据结构映射数据的不同方法。

这使我们获得了JSON(和XML)优于自定义格式的真正优势。

  • 使用JSON和XML,您可以选择任何主流语言使用的库来帮助编码和解码内容。使用自定义格式,您必须为客户端和服务器端滚动自己的编码/解码。
  • 使用JSON和XML,有一些标准说明了格式正确的标准,允许其他人实现编码器/解码器。对于自定义格式,如果希望其他人能够实现您的格式,则必须自己编写规范。
  • JSON和XML具有处理字符集编码和数据中出现的“元”字符等问题的标准方法。使用风俗习惯,您必须自己了解并解决这些问题。 (如果您不这样做,那么很可能会遇到麻烦。)
  • 易于更改。演化基于JSON / XML的格式是相对简单的事情。但是使用自定义格式,您(至少)需要做更多的工作,并且取决于您的设计选择,这可能非常困难。

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

跟进

但是,如果相反,您假设我没有使用自定义实现,而是将发送带有文本/纯文本的MIME类型的JSON与应用/ JSON的MIME类型的JSON进行比较,该怎么办?

答案是几乎没有性能差异。

  • 您可以在HTTP请求或响应标头中保存6个字节,因为mime类型字符串较短,但是对于大小以千字节为单位的典型HTTP消息而言,这并不重要。
  • 使用“文本/纯文本”内容类型与对请求或响应消息进行编码/解码所需的工作没有区别……除了比较/复制6个额外字节所花费的时间外,这可能太小了测量。

另外,使用不正确的MIME类型(可以说)违反了HTTP规范。如果您这样做:

  • 接收者处理响应的可能性更大;例如无法解码,或无法在浏览器窗口中显示,并且
  • 如果您的客户端或服务器使用HTTP内容类型协商,则可能会中断它。

简而言之,我认为没有充分的理由这样做,还有一些没有这样做的充分理由。

    公众号
    关注公众号订阅更多技术干货!