parsingJSON比parsingXML更快

我正在创build一个复杂的JavaScript库来处理我公司的服务器端框架。

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

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

我真正关心的是浏览器中parsingJSON和XML的性能。 真的有很大的不同吗? 还是应该专门去JSON? 有没有人有任何经验或在两者之间的性能差异的基准?

我意识到,大多数现代Web开发人员可能会selectJSON,我可以看到为什么。 不过,我真的只是performance感兴趣。 如果有一个certificate巨大的差异,那么我准备花费额外的精力为客户端生成JSON服务器端。

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

<script type="text/javascript"> var data = <?php json_encode($data)?>; </script> 

有关更多信息,请参阅:

为什么大家selectjQuery XML的jQuery?

另外…你真的必须投入“生成”JSON“额外的努力”吗? 当然,你不能说你会手动build立JSONstring吗? 几乎每种现代服务器端语言都有将本地variables转换为JSONstring的库。 例如,PHP的核心json_encode函数像这样转换一个关联数组:

 $data = array('test'=>'val', 'foo'=>'bar'); 

 {"test": "val", "foo": "bar"} 

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

首先,我想向所有回答我的问题的人表示感谢。 我真的很感谢你的回应。

关于这个问题,我通过运行一些基准进行了一些进一步的研究。 parsing发生在浏览器中。 IE 8是唯一没有原生JSONparsing器的浏览器。 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似乎有着几乎相同的速度。 请注意,这是parsing大量的数据。 只有less量的数据,这可能不是什么大不了的事情。

基准已经完成。 这是一个 。 在一些早期的浏览器中的差异似乎是整个数量级(大约为几十毫秒,而不是几百毫秒),但不是很大。 部分原因在于服务器响应时间 – XML作为数据格式体积庞大。 其中的一部分是parsing时间–JSON允许您发送JavaScript对象,而XML则需要parsing文档。

您可以考虑添加到您的公共API的方法来返回JSON,而不是修改现有的function,如果它成为和问题,除非你不想公开的JSON。

另请参阅SO问题什么时候更喜欢JSON over XML?

性能不是真正的考虑因素,假设你不是在谈论千兆字节的XML。 是的,这将花费更长的时间(XML是更详细的),但它不会是用户会注意到的东西。

在我看来,真正的问题是支持JavaScript中的XML。 E4X很好,但不被Microsoft支持。 所以你需要使用第三方库(比如JQuery)来parsingXML。

由于JSON本身就是为Javascriptdevise的,所以它将整天执行XMLparsing。 你没有提到你的服务器端语言,在PHP中有PHP内核中内置的json_encode / json_decodefunction。

如果可能的话,只要测量一下就可以了。 如果可能的话,我的意思是说,JavaScript的工具(特别是性能分析)可能不像独立编程语言那么好。

为什么衡量? 由于仅基于数据格式属性的推测对于性能分析并不是非常有用,因此开发人员的直觉在预测性能方面差强人意。 在这种情况下,这意味着这一切都归结为正在使用的各个XML和JSONparsing器(和生成器)的成熟。 XML具有更长的优势, JSON处理起来更简单一些。 这基于实际编写的库来处理两者。 最后,如果所有东西都是平等的(库的成熟度和性能优化),那么JSON确实可以更快地处理。 但是两者都可以很快; 或者执行速度很慢。

但是,我怀疑你们不应该像担心过的那样,担心performance太差。 xml和json都可以被有效地parsing,而且用现代的浏览器,可能是。 机会是,如果你有性能问题,那就不是读写数据而是别的东西; 而第一步实际上是搞清楚实际问题是什么。

性能上的差异将会非常小,你甚至不会注意到它(和:你不应该考虑性能问题,直到你性能问题 – 有更多重要的要点照顾 – 维护,可读和logging码…)。

但是,要回答你的问题:JSON将更快parsing(因为它是简单的JavaScript对象表示法)。

在这种情况下,我会说坚持XML。 所有主stream浏览器都有一个DOMparsing接口,可以parsing格式良好的XML。 此链接显示了在Webkit / Opera / Firefox中使用DOMParser接口的方法,以及IE中的ActiveX DOM对象: https : //sites.google.com/a/van-steenbeek.net/archive/explorer_domparser_parsefromstring

parsing或构buildjson比xml相对容易,而且大多数语言提供了更容易编码和解码json的方法,这与xml有点复杂。

这也取决于你的JSON的结构。 树状结构倾向于比对象列表更有效地parsing。 这就是人们对数据结构的基本理解的方便之处。 如果在JSON中parsing一个类似于列表的结构,那么我不会感到惊讶:

 { { "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 } } 

然后将它与XML中的结构比较,如下所示:

 <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结构可能比JSON产生更快的时间,因为如果我通过英国的节点find伦敦,我不必循环通过其他国家find我的城市。 在JSON的例子中,如果伦敦接近列表的底部,我可能会这样做。 但是,我们在这里有一个结构上的差异。 我会惊讶地发现XML在任何一种情况下或者在结构完全相同的情况下都更快。

这里是我用Python做的一个实验 – 我知道这个问题是严格从JavaScript的angular度来看这个问题的,但是你可能会觉得它很有用。 结果显示JSON比XML更快。 然而,重点是:你的结构将如何有效地检索它。

我发现关于这两个最好的例子是:

http://www.utilities-online.info/xmltojson/#.VVGOlfCYK7M

这意味着JSON比XML更易于理解。