解析JSON比解析XML更快

gem*_*rix 54 javascript xml json

我正在创建一个复杂的JavaScript库,用于处理我公司的服务器端框架.

服务器端框架将其数据编码为简单的XML格式.没有花哨的名字空间或类似的东西.

理想情况下,我想将浏览器中的所有数据解析为JSON.但是,如果我这样做,我需要重写一些服务器端代码以吐出JSON.这是一个痛苦,因为我们有公共API,我不能轻易改变.

我真正关心的是在解析JSON与XML的浏览器中的性能.关注真的有很大的不同吗?或者我应该专门去寻找JSON?有没有人在两者之间的性能差异方面有任何经验或基准?

我意识到大多数现代Web开发人员可能会选择JSON,我可以理解为什么.但是,我真的只对表现感兴趣.如果已经证明存在巨大差异,那么我准备花费额外的精力为客户端生成JSON服务器端.

tre*_*ace 31

JSON应该更快,因为它是JS Object Notation,这意味着它可以被JavaScript本地识别.在GET方面的PHP中,我经常会这样做:

<script type="text/javascript">
    var data = <?php json_encode($data)?>;
</script>
Run Code Online (Sandbox Code Playgroud)

有关这方面的更多信息,请参见此处:

为什么Everyone为jQuery选择JSON Over XML?

另外......你真正需要在"生成"JSON中加入什么"额外的努力"?当然你不能说你将手动构建JSON字符串?几乎每种现代服务器端语言都有将原始变量转换为JSON字符串的库.例如,PHP的核心json_encode函数转换一个关联数组,如下所示:

$data = array('test'=>'val', 'foo'=>'bar');
Run Code Online (Sandbox Code Playgroud)

{"test": "val", "foo": "bar"}
Run Code Online (Sandbox Code Playgroud)

这只是一个JavaScript对象(因为在JS中没有关联数组(严格来说)).

  • 此外,(如链接问题中所指出的),JSON通常在字节方面更轻量级,使其更有效地进行传输.最有可能的是,与解析JSON与XML的任何差异相比,通过减少带宽需求,您将获得更多的性能优势. (9认同)
  • 更正时,通过在编译时添加--disable-json,可以禁用JSON. (2认同)
  • 这个答案在几个方面可能是错误的。JS确实有关联数组,实际上{}和[]都是关联数组TMK。其次,JSON 是一种类似于 JS 对象的符号这一事实并不意味着 JSON 解析的 JS 实现比 JSON 解析的 Java 实现快,等等。 (2认同)

gem*_*rix 19

首先,我要感谢所有回答我问题的人.我真的很感谢你的所有回复.

关于这个问题,我通过运行一些基准进行了一些进一步的研究.解析发生在浏览器中.IE 8是唯一没有本机JSON解析器的浏览器.XML与JSON版本的数据相同.

Chrome(版本8.0.552.224),JSON:92ms,XML:90ms

Firefox(版本3.6.13),JSON:65ms,XML:129ms

IE(版本8.0.6001.18702),JSON:172ms,XML:125ms

有趣的是,Chrome似乎具有几乎相同的速度.请注意,这是解析大量数据.由于数据片段不多,这可能不是什么大问题.

  • 我很想看到Firefox 9+和Chrome 16+的更新 (5认同)

jus*_*tkt 8

基准已经完成. 这是一个.一些早期浏览器的差异似乎是整个数量级(大约10毫秒而不是100毫秒),但不是很大.部分原因在于服务器响应时间 - XML作为数据格式更为庞大.部分原因是解析时间--JSON允许您发送JavaScript对象,而XML需要解析文档.

您可以考虑向您的公共API添加一个方法来返回JSON,而不是修改现有函数,如果它成为和发布,除非您不想公开JSON.

另请参阅SO问题何时优先使用JSON而不是XML?

  • 轻微的挑剔,wrt"JSON允许你发送JavaScript对象,而XML需要解析文档" - 这不是真的; 两者都需要写入和读取(序列化/反序列化,编组/解组),因为所有数据都以字节流的形式发送.然而,与XML DOM树相比,为JSON构建的数据结构更为自然. (2认同)