PHP:JSON或XML解析器更快吗?

时间:2009-06-14 17:38:38

标签: php xml json performance

我正在构建与Twitter API接口的类,我想知道PHP的内置XML或JSON解析器是否更快? Twitter将以任一格式向我发送相同的数据,因此PHP性能将决定我的选择。我正在使用php_apc,所以你可以忽略解析时间并假设我正在运行字节码。

谢谢!

更多:我只是想从数据中获取关联数组。我不是在做树行走,节点迭代或任何太复杂的事情。格式将始终相同。 (我希望!)

6 个答案:

答案 0 :(得分:17)

亚当上面的评论说服我对它进行基准测试。使用https://twitter.com/status/mentions.[format],我发现simplexml_load_string()比json_decode()快得多。但差异实际上是一个误差范围。

Test #1 time (xml): 3.75221395493 seconds
Test #2 time (xml): 4.1562371254 seconds
Test #3 time (xml): 3.60420489311 seconds
Test #4 time (xml): 3.85622000694 seconds
Test #5 time (xml): 3.89622211456 seconds

Test #1 time (json): 4.53225803375 seconds
Test #2 time (json): 4.06823205948 seconds
Test #3 time (json): 4.03222990036 seconds
Test #4 time (json): 3.80421590805 seconds
Test #5 time (json): 3.88022208214 seconds

在下面的代码中(我已经将数据卷曲到文件,数据。[xml,json])。

<?php

$test = 'json';  //xml or json
$data = implode(file("data.".$test),"\r\n");

for ($t=1; $t<=5; $t++) {
    $start[$t] = microtime(1);
    for ($i=0; $i<3000; $i++) {
        if ($test == 'xml') $xml = simplexml_load_string($data);
        else $json = json_decode($data);
    }
    $end[$t] = microtime(1);
    echo "<p>Test #{$t} time ({$test}): " . ($end[$t] - $start[$t]). " seconds</p>";
}

答案 1 :(得分:12)

我没有做任何基准但是......

由于JSON只是对嵌套字符串序列的描述,而不需要提供DOM接口,属性解析和其他微妙的东西,我的猜测是JSON解析器比XML解析器更快。

答案 2 :(得分:5)

当json返回是一个对象时,我倾向于发现simplexml_load_string()比json_decode()更快。

但是,使用json_decode($ string,true)将json作为数组返回实际上比使用对象快得多(在将数组与对象进行比较时,大多数情况都是如此)。

在这种情况下,我看到json_decode()的速度是simplexml_load_string()的两倍。

答案 3 :(得分:1)

答案取决于您打算如何使用它。我的意思是如果你要创建一些请求并在PHP脚本中处理它们,我相信XML会更快。但是一旦你考虑创建和AJAX调用以及后来的结果处理,你应该考虑使用JSON,因为你可以从JavaScript中自动表示JSON结果作为对象,并且它支持带有回调函数的跨域请求,而对于XML,你将代理

答案 4 :(得分:1)

您是否考虑过整体带宽节省可能会如何影响脚本的性能?如果您的请求将被重复,那么使用JSON的大量时间应该是合理的经济选择。

答案 5 :(得分:0)

JSON的大小往往要小很多

此外,您运行json_decode一次,然后将数据作为数组访问,不得用于任何其他功能。

如果没有运行基准测试,那么使用JSON会更快