JSON 与 XML 的性能注意事项
Posted
技术标签:
【中文标题】JSON 与 XML 的性能注意事项【英文标题】:Performance considerations of JSON vs. XML 【发布时间】:2010-11-01 17:42:23 【问题描述】:我正在使用一个以 XML 或 JSON 格式提供大型结果集的 Web 服务。 哪种格式会更快或更好(基于性能)?另外我应该使用哪种语言来解析 XML/JSON?我应该使用 php 还是 javascript?
【问题讨论】:
【参考方案1】:“PHP 或 JavaScript”听起来像是一个奇怪的选择:PHP 通常用作服务器端语言,而 JavaScript 通常用作客户端 -副语言。
你的情况如何?是什么让您特别推荐这两种语言?如果您可以提供有关您正在尝试做的事情的更多信息,那将有很大帮助。 (我们不知道您是在开发 Web 应用程序、批处理工具还是 GUI 应用程序等)
我怀疑 JSON 会比 XML 更紧凑一些,尽管如果它们压缩数据,您很可能会发现它们最终会占用相同的带宽(因为 XML 的许多“膨胀”很容易压缩)。
与以往一样,找出答案的最佳方法是使用一些真实数据测试特定的 Web 服务。概括性不是决策的良好基础。
【讨论】:
我正在开发一个使用健康服务 API 来显示结果的网站..... 所以您将从您的网络服务器进行网络服务调用,对吗?您需要如何将结果提供给客户?如果您想将它们格式化为 html,那么您需要从 Web 服务器以您使用的任何语言解析响应。我不建议将 Web 服务调用的结果直接传递给客户端并让浏览器解析它......如果您希望客户端看到“原始”结果,我会感到惊讶。 我从不使用 PHP 作为服务器端语言。曾经。除非我用它来实际……你知道……写服务器。这条评论相对不知情,@AwalGarg。【参考方案2】:两者各有优势:
JSON
易于处理:$dataStructure = JSON_decode($serializedString);
,完成。
XML
部分数据处理:如果您的结果集太大而无法一次处理(解析),这可能是要走的路。注意:SimpleXML 更容易使用 xml lib,但也可以一次解析整个 xml 文件,因此在这种情况下,与 JSON 相比没有任何好处。使用哪种语言处理结果集的问题有点荒谬。 javascript 是客户端*,php 是服务器端。所以,这取决于你想对结果集做什么。
您可以直接将结果传递给浏览器/js,而无需在服务器端做任何事情,让客户端进行过滤和渲染。这在某些情况下可能有意义,但通常不是您想要的。
我的建议:如果可能,请使用 JSON。
ad *:您可以在服务器端使用 javascript(rhino、v8cgi、...),但这不是您的想法。
【讨论】:
【参考方案3】:我会选择 JSON,您无需支付“尖括号税”。 PHP 和 Javascript 之间的选择与数据所需的处理量有关(我在这里进行了一次飞跃)。
大量处理,使用 PHP 所以它是服务器端。很少处理使用 Javascript 来获得响应更快的页面(通过 AJAX 加载数据)。
【讨论】:
尖括号税只是为了美观。解析并不难,实际上编写解析器来正确解析带有属性的 xml 标记比解析 JavaScript 字符串更容易。例如,XML 可以有实体,JavaScript 字符串可以有转义序列。更容易知道实体在标记器阶段结束的位置,因为它总是有一个分号。 JavaScript 字符串中的转义序列将具有不同的长度,具体取决于它是什么。与始终在第一个右尖括号处结束的标签类似。在语法中添加冗余有助于解析而不是阻碍。【参考方案4】:虽然语言/工具组合之间的性能方面确实存在很大差异,但最终 xml 和 json 在使用平台的最佳工具时往往具有相似的性能特征。也就是说,您不会再找到两倍或更多的速度。文本格式的理论限制相似。在这方面,几乎所有用例都“足够好”。
因此,对于您的任务,我将更多地关注工具支持。除此之外,格式选择不太可能是最重要的考虑因素。
就像 Jon 提到的,PHP 和 Javascript 的比较听起来很奇怪......苹果和橘子左右。
【讨论】:
【参考方案5】:可能遗漏的一件事是 JavaScript 客户端不必解析 JSON,因此您将在那里获得性能优势。浏览器会将 XML 解析为 DOM 并将其交给您的回调,然后您需要从该 DOM 中提取您需要的信息。使用 JSON,您可以返回一个对象,并且不再需要从 DOM 中提取。
【讨论】:
【参考方案6】:我认为你必须自己测量它。性能取决于:
-
数据的大小
数据的复杂性
其格式(JSON 或 XML)
所以你可以看到有很多变量。
您使用的网络服务是否需要更长的时间才能以一种格式组装数据而不是另一种格式?
解析 JSON 和 XML 有很多选项,所以不要将自己限制在 PHP 或 Javascript(如果您有选择的话)。最后,如果您从 Web 服务请求,您将承担网络传输成本、连接设置等开销。因此,解析性能所节省的任何时间都可以忽略不计。您的努力可能最好花在其他地方。
我想我没有回答你的问题,除了给你更多的思考!
【讨论】:
仅供参考 JSON 表示 JavaScript 对象表示法(不是 Jason 中的某个人的名字,但我还是把它拼写为 Jason)。【参考方案7】:你应该使用python,最好:)
至于格式,我猜 JSON 会快一点,但要看细节,而且这个任务无论如何都是网络绑定的。
【讨论】:
【参考方案8】:如果你正在使用带有ajax的应用程序,那么你应该选择Javascript在客户端处理数据,这将减少服务器上php的使用,意味着更高效的服务器端。您可以将结果集存储在 json 文件中,然后可以在客户端使用 javascript 调用它,这将是最好的方法,因为这不会消耗您在服务器上的资源,并且数据将在客户端进行处理。在这里,我将优先考虑 json 而不是 xml,因为 xml 比 json 需要更多的空间来存储,因为它的标签样式和 json 就像 javascript 中的一个数组,它将比 xml 更快。在服务器端同样的事情,你可以轻松地将你的 json 数组转换为 php 数组(只需参考 PHP 中的 json_decode 函数)。
现在 json 很流行,因为它易于使用且速度更快。
为了获得更快的性能,您应该减少服务器端的数据处理,而应该使用客户端资源,这种方法将为您的应用程序提供速度和成本效益。
【讨论】:
最后一段(“为了更快的性能......”)是非常糟糕的建议。服务器端处理还是客户端处理最合适取决于您要执行的操作,但在许多(可能是大多数)情况下,在服务器端处理数据会更快。 您不能假设如果您通过 JavaScript 在客户端处理某些内容,那么它没有被篡改。即使它不是恶意的,比如插件,或者一些 JavaScript 留在内存中(想想 IE),你仍然需要在服务器端仔细检查。永远不要假设从客户端传入的任何内容都是应有的,请进行检查。否则,我们将有更多的微软和更多的苹果公司被黑客入侵并泄露用户的敏感信息(也会损害你的声誉)。以上是关于JSON 与 XML 的性能注意事项的主要内容,如果未能解决你的问题,请参考以下文章
sql 简单的PostgreSQL函数来操作json对象。 (注意:性能不是这些功能的关注点)
sql 简单的PostgreSQL函数来操作json对象。 (注意:性能不是这些功能的关注点)
37.JavaScript对象与JSON格式的转换,JSON.stringifyJSON.parse方法的使用方法和注意事项