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

16 php xml performance json

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

谢谢!

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

小智 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在下面的代码中(我已经将数据卷曲到文件,数据.[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>";
}
Run Code Online (Sandbox Code Playgroud)

  • 但是,在加载后,此测试不会从XML对象读取数据.当json_decode返回一个简单的数组时,SimpleXML为一个对象提供了读取数据的特殊方法,包括一些动态魔法.这可能会影响性能. (15认同)

e-s*_*tis 12

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

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

  • 呃.这些都不是正确的答案 - 正确的是"去衡量它".认真.我测量了性能,并且有很大的重叠 - 慢速json解析器比快速xml解析器慢,反之亦然.注意:XML _PARSING_是一个非常低级的东西,可以快速完成(同样适用于XML).DOM与解析无关; 它是一个树结构,可以选择构建低级令牌.对于完全可选的XML Schema也是如此.使用此类附加组件具有显着的性能影响(开销).如果需要对实际对象进行真正的数据绑定,则JSON add ons也是如此. (12认同)
  • 解析JSON格式比定义良好的XML复杂得多.解析字符串是一项非常复杂的工作,可能是因为您使用的是标准库函数,您感觉不到它,但解析结构化XML要比使用JSON构建的数据简单得多. (4认同)
  • 如果最初的回答者证明它错了,不知道为什么这是被接受的... (3认同)
  • @mike - 关心与实际结果分享链接? (3认同)

Dav*_*xon 5

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

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

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