当前位置: 首页 > 面试题库 >

使用application / json优于text / plain的优势?

秦宜修
2023-03-14
问题内容

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


问题答案:

假设您正在谈论使用JSON与自定义格式(使用MIME type text/plain)传递结构化数据。

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

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

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

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

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

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

  • 使用JSON和XML,有一些标准说明了格式正确的标准,允许其他人实现编码器/解码器。对于自定义格式,如果希望其他人能够实现您的格式,则必须自己编写规范。

  • JSON和XML具有处理诸如字符集编码和数据中出现的“元”字符之类问题的标准方法。使用风俗习惯,您必须自己了解并解决这些问题。(如果您不这样做,很可能会遇到麻烦。)

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

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

跟进

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

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

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

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

  • 接收者处理响应的可能性更大;例如无法解码,或在浏览器窗口中显示它,以及

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

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



 类似资料:
  • 问题内容: 在实践中,相比于innerHTML,使用createElement有什么优势?我之所以问是因为,我坚信使用innerHTML在性能和代码可读性/可维护性方面会更加有效,但是我的团队成员已经决定使用createElement作为编码方法。我只是想了解createElement如何更有效。 问题答案: 除了安全之外,使用其他方法还具有一些优点,而不是修改(而不是仅仅丢弃已有的内容并替换它)

  • 我在PHP中使用了一些AJAX来处理提交表单之类的事情,最近我开始研究WebSockets。我跟随本教程来了解基础知识。据我所知,websockets保持连接打开,而AJAX打开和关闭请求。 我的问题是,如果您只是提交表单或auto_complete之类的简单任务(这里有一个jQuery插件),websockets是否比AJAX有优势?也许教程不是最棒的,但似乎要让websockets工作(至少在

  • 根据文档,响应自动作为JSON、XML或字符串对象提供,具体取决于响应内容。 在我的例子中,我的响应的内容类型为text/plain 这在我将字符串转换为响应,然后验证的地方工作(我已经逃过了所有的反斜杠) 这是失败的。当响应也可用作字符串时,为什么会失败 com.intuit.karate.exception.KarateExc0019:路径: $[*], 实际:["a. b. c匹配\"(\d

  • 问题内容: 在我的慢速查询日志中,此查询(使用不同的名称而不是“ jack”)发生了很多次。为什么? Users表具有许多字段(超过我选择的这三个字段)和大约40.000行。 是主要的,并且是自动递增的。 有一个索引。 具有唯一索引。 有时需要3秒钟!如果我在MySQL上解释选择,我会得到: 这是我能做的最好的吗?我该如何解决? 问题答案: 如果必须使用regexp-style 子句,则肯定会遇到

  • 我需要使用java应用程序设置剪贴板内容,以便用户可以使用两种MIME类型。这将允许用户粘贴他们想要的文本版本。 我发现了一个适用于JavaScript的例子,我希望有一个等效的Java。 JavaScript示例: 这基本上就是我在Java应用程序中拥有的: 我知道如何设置内容,可以是“text/plain”字符串,也可以是“text/html”字符串。上面的Java示例将在剪贴板中放置一个纯文

  • 许多应用服务器都集成了连接池,甚至可以配置独立的应用程序来使用HikariCP、Apache DBCP等。 那么,当应用程序已经有了连接池时,使用PgBouncer有什么好处呢? 我找到的最接近的答案是,将事务池与pgbouncer一起使用有什么好处?其中没有提到使用另一个连接池,并提到其优点是空闲会话的使用。 我主要使用配置有最小池大小、最大池大小、空闲超时的WildFly......因此,当它