Javascript 解析JSON比解析XML快吗

Javascript 解析JSON比解析XML快吗,javascript,xml,json,Javascript,Xml,Json,我正在创建一个复杂的JavaScript库,用于使用我公司的服务器端框架 服务器端框架将其数据编码为简单的XML格式。没有花哨的名称空间或类似的东西 理想情况下,我希望将浏览器中的所有数据解析为JSON。然而,如果我这样做的话,我需要重写一些服务器端代码,以同时吐出JSON。这是一个痛苦,因为我们有公共API,我不能轻易改变 这里我真正关心的是浏览器解析JSON和XML的性能。真的有很大的不同需要关注吗?还是我应该只使用JSON?有没有人在这两者的性能差异方面有任何经验或基准 我意识到大多数现代

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

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

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

这里我真正关心的是浏览器解析JSON和XML的性能。真的有很大的不同需要关注吗?还是我应该只使用JSON?有没有人在这两者的性能差异方面有任何经验或基准


我意识到大多数现代web开发人员可能会选择JSON,我明白为什么。然而,我真的只是对性能感兴趣。如果确实存在巨大差异,那么我准备花费额外的精力为客户端生成JSON服务器端。

JSON应该更快,因为它是JS对象表示法,这意味着它可以通过JavaScript本机识别。在PHP中,在GET方面,我通常会做如下操作:

<script type="text/javascript">
    var data = <?php json_encode($data)?>;
</script>
$data = array('test'=>'val', 'foo'=>'bar');
{
        {
            "name": "New York",
            "country":"USA",
            "lon": -73.948753,
            "lat": 40.712784
        },
        {
            "name": "Chicago",
            "country":"USA",
            "lon": -23.948753,
            "lat": 20.712784
        },
        {
            "name": "London",
            "country":"UK",
            "lon": -13.948753,
            "lat": 10.712784
        }
}
<cities>
  <country name="USA">
     <city name="New York">
        <long>-73.948753</long>
        <lat>40.712784</lat>
     </city>
     <city name="Chicago">
        <long>-23.948753</long>
        <lat>20.712784</lat>
     </city>
  </country>
 <country name="UK">
     <city name="London">
        <long>-13.948753</long>
        <lat>10.712784</lat>
     </city>
  </country>
</cities>
进入


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

因为JSON是JavaScript的本机语言,是为JavaScript设计的,所以它将整天执行XML解析。您没有提到您的服务器端语言,在PHP中,PHP核心内置了json_encode/json_decode功能…

性能上的差异非常小,您甚至不会注意到它(而且:在出现性能问题之前,您不应该考虑性能问题——还有许多更重要的问题需要注意——可维护、可读和文档化的代码……)


但是,为了回答你的问题:JSON将更快地解析(因为它是简单的javascript对象表示法)。

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

您可以考虑添加公共API来返回JSON,而不是修改现有函数,如果它变成和发布,除非您不想公开JSON。


另请参见问题

假设您不是在谈论千兆字节的XML,那么性能并不是一个真正的考虑因素。是的,它需要更长的时间(XML更详细),但用户不会注意到这一点


在我看来,真正的问题是JavaScript中对XML的支持。这很好,但Microsoft不支持。因此您需要使用第三方库(如JQuery)解析XML。

在这种情况下,我要说的是坚持使用XML。所有主要浏览器都有一个DOM解析接口,可以解析格式良好的XML。此链接显示了一种使用Webkit/Opera/Firefox中的
DOMParser
接口的方法,以及IE中的ActiveX DOM对象的方法:

如果可能的话,只需对其进行测量即可如果可能的话,我的意思是javascript工具(特别是性能分析工具)可能不如独立编程语言好

为什么要测量?因为仅仅基于数据格式属性的推测对性能分析不是很有用——开发人员的直觉在预测性能方面是出了名的差。在这种情况下,这意味着这一切都取决于各自的XML和JSON解析器(和生成器)的成熟度XML的优点是使用时间更长;JSON的处理更简单。这是基于实际编写了用于处理这两个方面的库。最后,如果所有条件都相同(库的成熟度和性能优化),JSON的处理速度确实可以快一点,但两者都可以非常快,或者在实现不好的情况下非常慢

但是:我认为您不应该像许多人已经建议的那样,对性能有太多的担心。xml和json都可以高效地解析,而在现代浏览器中,可能是这样。
如果您有性能问题,可能不是读写数据,而是其他问题;第一步是找出实际问题。

首先,我要感谢所有回答我问题的人。我非常感谢您的回答

关于这个问题,我通过运行一些基准测试进行了进一步的研究。解析发生在浏览器中。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似乎有着几乎相同的速度。请注意,这是在解析大量数据。由于数据片段很少,这可能不是什么大问题。

这还取决于JSON的结构方式。树状结构往往比对象列表更有效地解析。这是一个人的基本理解对数据结构的分析非常方便。如果您在JSON中解析类似列表的结构,我不会感到惊讶,它可能如下所示:

<script type="text/javascript">
    var data = <?php json_encode($data)?>;
</script>
$data = array('test'=>'val', 'foo'=>'bar');
{
        {
            "name": "New York",
            "country":"USA",
            "lon": -73.948753,
            "lat": 40.712784
        },
        {
            "name": "Chicago",
            "country":"USA",
            "lon": -23.948753,
            "lat": 20.712784
        },
        {
            "name": "London",
            "country":"UK",
            "lon": -13.948753,
            "lat": 10.712784
        }
}
<cities>
  <country name="USA">
     <city name="New York">
        <long>-73.948753</long>
        <lat>40.712784</lat>
     </city>
     <city name="Chicago">
        <long>-23.948753</long>
        <lat>20.712784</lat>
     </city>
  </country>
 <country name="UK">
     <city name="London">
        <long>-13.948753</long>
        <lat>10.712784</lat>
     </city>
  </country>
</cities>
然后将其与XML中的树状结构进行比较,该结构可能如下所示:

<script type="text/javascript">
    var data = <?php json_encode($data)?>;
</script>
$data = array('test'=>'val', 'foo'=>'bar');
{
        {
            "name": "New York",
            "country":"USA",
            "lon": -73.948753,
            "lat": 40.712784
        },
        {
            "name": "Chicago",
            "country":"USA",
            "lon": -23.948753,
            "lat": 20.712784
        },
        {
            "name": "London",
            "country":"UK",
            "lon": -13.948753,
            "lat": 10.712784
        }
}
<cities>
  <country name="USA">
     <city name="New York">
        <long>-73.948753</long>
        <lat>40.712784</lat>
     </city>
     <city name="Chicago">
        <long>-23.948753</long>
        <lat>20.712784</lat>
     </city>
  </country>
 <country name="UK">
     <city name="London">
        <long>-13.948753</long>
        <lat>10.712784</lat>
     </city>
  </country>
</cities>

-73.948753
40.712784
-23.948753
20.712784
-13.948753
10.712784
XML结构产生的时间可能比JSON要快,因为如果我通过UK的节点找到伦敦,