- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
使用内容类型 application/json
通过 text/plain
发送序列化为 json 的对象是否有任何性能优势?
我知道许多框架(如 Spring)可以根据内容类型映射和序列化数据,但总的来说,我发现这个过程很简单,因此使用 application/json
在 text/plain
上用于 JSON 对象。
例子:
xhr.setRequestHeader("Content-type","text/plain");
// or
xhr.setRequestHeader("Content-type","application/json");
xhr.send(JSON.stringify({"foo": "bar"}));
最佳答案
假设您正在讨论使用 JSON 与自定义格式(使用 MIME 类型 text/plain
)来传递结构化数据。
性能可以分解为不同的组件;例如
理论上,我们可以说一个假设的优化设计和实现的自定义格式不会比 JSON 慢或密度不低。 (“证明”很明显。选择 JSON 的最佳实现,并对不影响性能的格式进行一些小改动。)
但实际上,您必须比较实际格式和实际实现的性能。因此,性能实际上取决于您在设计和实现格式及其相关的编码/解码软件方面做得如何。此外,它还取决于您如何实现 JSON。有许多具有不同性能特征的服务器端 JSON 库,以及将数据从/映射到“ native ”数据结构的不同方式。
这让我们了解到 JSON(和 XML)相对于自定义格式的真正优势。
借助 JSON 和 XML,您可以使用任何主流语言的库来协助编码和解码内容。使用自定义格式,您必须为客户端和服务器端滚动自己的编码/解码。
对于 JSON 和 XML,有一些标准说明什么是格式良好的,允许其他人实现编码器/解码器。使用自定义格式,如果您希望其他人能够实现您的格式,则必须自己编写规范。
JSON 和 XML 具有处理字符集编码和出现在数据中的“元”字符等问题的标准方法。对于习惯,您必须自己了解和解决这些问题。 (如果你不这样做,你很可能会遇到困难。)
易于更改。演化基于 JSON/XML 的格式是一件相对简单的事情。但是使用自定义格式,您(至少)还有更多工作要做,而且根据您的设计选择,这可能会非常困难。
对于大多数应用程序,这些问题远比性能更重要。这就是 JSON 或 XML 被广泛使用的原因。
跟进
But what if instead you assume that I'm not using a custom implementation and compare sending JSON with a mime type of text/plain to that of mime type application/json?
那么答案是它几乎没有 性能差异。
此外,使用不准确的 MIME 类型(可以说)违反了 HTTP 规范。如果你这样做:
接收方更有可能对响应处理不当;例如无法解码,或在浏览器窗口中显示,并且
假设您的客户端或服务器使用它,您可能会中断 HTTP 内容类型协商。
简而言之,我想不出这样做的好理由1,以及不这样做的一些好理由。
1 - 一般情况下。显然,会有边缘情况......
关于javascript - 使用 application/json 优于 text/plain 的优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350753/
文件 A 包含 hash:plain文件 B 包含用户名:hash需要的输出用户名:plain有什么办法可以在 shell 中做到这一点吗? 最佳答案 使用带有cut的命令替换: echo $(cut
我可以看到来自邮件服务器的许多 ehlo 命令回显,如下所示: 我想知道“250-AUTH LOGIN PLAIN”和“250-AUTH=LOGIN PLAIN”有什么区别?谢谢 最佳答案 它们的意思
我试图了解两者之间的区别: 一个“普通” elasticsearch查询,它将与术语查询匹配,并返回一定数量的匹配。 和一个过滤的查询(因此使用过滤器)将返回相同的匹配数。 这是术语查询: GET _
我正在开发一个可以接收文件 url 的应用程序,并且应该根据文件类型(音频、视频、图像)做不同的事情。所以我以这种方式获取文件的内容类型: URLConnection connection = url
Nodemailer 使用完全相同的配置正常工作了几个月。 var smtpTransport = nodemailer.createTransport({ service: "Zoho", auth
我使用的是来自非正统终端的gradle,因此Gradle的传统“漂亮”输出不起作用。 有什么方法可以在〜/ .gradle / gradle.properties中指定每个gradle命令都应使用--
在 Julia 中,你不能存储这样的字符串: str = "\mwe" 因为有一个反斜杠。因此,以下内容可以帮助您防止这种情况发生: str = "\\mwe" "$,\n" 和许多其他符号也会发生同
我需要将 data.frame 对象“转换”为纯文本(如 print 输出到控制台。 到目前为止,我创建了以下函数(使用 stringr 包),但我想知道是否存在已实现的函数或更有效的方法: toSt
在 Julia 中,你不能存储这样的字符串: str = "\mwe" 因为有一个反斜杠。因此,以下内容可以帮助您防止这种情况发生: str = "\\mwe" "$,\n" 和许多其他符号也会发生同
我正在编写一个登录面板来访问管理面板。数据(用户名和密码)存储在 MySQL 数据库(类型:InnoDB)中。在表中查看密码以纯文本形式存储,在字段密码中我有:{普通}密码。 调整我已有的代码时,我遇
我正在尝试使用类名 Plain Javascript 获取第一个子元素。 我正在尝试编写自己的表单验证并尝试附加错误消息并将其删除。如果错误消息已经存在,则不要追加。 如果您帮助我完成第一部分,为 c
问题:使元组的元组“简单”的最佳方法是什么?例如。一维。 案例 1 template auto process_field(Field&& field){ // or another std
我正在编写一个 Web 应用程序 API,当有人访问 URL 时,它会返回文本数据。我将内容类型设置为“文本/纯文本”,但是当我使用 Chrome 访问它时,它会下载一个包含信息的文件,而不是显示它。
我尝试将文本粘贴到多个字段中,但只清除了第一个元素的格式,而不是第二个元素等。 我发现了这个问题 https://stackoverflow.com/a/12028136/3955607这工作正常,但
我有一个查询,它使用聚合函数将值的 maximum absolute 分配给表中的另一列。问题是查询完成时间需要花费大量时间(大约加起来 10-15 秒)。这是查询的样子: UPDATE calcul
我在尝试使用 text/plain 时收到以下响应: { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.13", "
我想做的是- For Clients to Broker communication - use OAUTHBEARER authentication For Broker to Broker com
我了解 th:if 如何用于 html 模板,但是当您期望纯文本(用例:纯文本电子邮件模板)时,我没有找到有关如何执行此操作的任何线索。 到目前为止,我尝试过: Dear [[${contact
我有以下代码: NSURL *URL = [NSURL URLWithString:[@"some-address"]]; NSMutableURLRequest *request = [NSMuta
关闭。这个问题需要多问focused 。目前不接受答案。 已关闭10 年前。 已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 有人可以用简单的
我是一名优秀的程序员,十分优秀!