使用 application/json 比文本/纯文本的优势是什么?[已关闭]

使用内容类型发送序列化为 json 的对象是否有任何性能优势?application/jsontext/plain

我知道许多框架(如Spring)可以根据内容类型映射和序列化数据,但总的来说,我发现这个过程很简单,它不是一个令人信服的理由来使用JSON对象。application/jsontext/plain

例:

xhr.setRequestHeader("Content-type","text/plain");
// or
xhr.setRequestHeader("Content-type","application/json");
xhr.send(JSON.stringify({"foo": "bar"}));

答案 1

假设您正在谈论使用 JSON 而不是自定义格式(使用 MIME 类型 )来传递结构化数据。text/plain

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

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

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

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

这给我们带来了JSON(和XML)相对于自定义格式的真正优势。

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

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

  • JSON和XML具有处理字符集编码和数据中出现的“元”字符等问题的标准方法。通过自定义,您必须了解并解决这些问题。(如果你不这样做,你很可能会陷入困境。

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

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

随访

但是,如果您假设我没有使用自定义实现,并将发送具有哑剧类型的文本/纯文本/纯文本的JSON与哑剧类型的应用程序/json的JSON进行比较呢?

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

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

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

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

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

简而言之,我想不出有充分的理由来做这件事1,还有一些很好的理由不这样做。


1 - 一般而言。显然,会有边缘情况...


答案 2

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

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