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更快。 然而,重点是:你的结构将如何有效地检索它。