php - SimpleXML 与 DOMDocument 性能对比

标签 php performance rss simplexml domdocument

我正在使用 SimpleXML 类构建 RSS 解析器,我想知道使用 DOMDocument 类是否会提高解析器的速度。我正在解析一个至少有 1000 行的 rss 文档,并且我使用了这 1000 行中的几乎所有数据。我正在寻找完成时间最短的方法。

最佳答案

SimpleXMLDOMDocument 都使用相同的解析器 (libxml2),所以它们之间的解析区别是可以忽略不计。

这很容易验证:

function time_load_dd($xml, $reps) {
    // discard first run to prime caches
    for ($i=0; $i < 5; ++$i) { 
        $dom = new DOMDocument();
        $dom->loadXML($xml);
    }
    $start = microtime(true);
    for ($i=0; $i < $reps; ++$i) { 
        $dom = new DOMDocument();
        $dom->loadXML($xml);
    }
    $stop = microtime(true) - $start;
    return $stop;
}
function time_load_sxe($xml, $reps) {
    for ($i=0; $i < 5; ++$i) { 
        $sxe = simplexml_load_string($xml);
    }
    $start = microtime(true);
    for ($i=0; $i < $reps; ++$i) { 
        $sxe = simplexml_load_string($xml);
    }
    $stop = microtime(true) - $start;
    return $stop;
}


function main() {
    // This is a 1800-line atom feed of some complexity.
    $url = 'http://feeds.feedburner.com/reason/AllArticles';
    $xml = file_get_contents($url);
    $reps = 10000;
    $methods = array('time_load_dd','time_load_sxe');
    echo "Time to complete $reps reps:\n";
    foreach ($methods as $method) {
        echo $method,": ",$method($xml,$reps), "\n";
    }
}
main();

在我的机器上我得到的基本上没有区别:

Time to complete 10000 reps:
time_load_dd: 17.725028991699
time_load_sxe: 17.416455984116

这里真正的问题是您使用的算法以及您对数据的处理方式。 1000 行不是一个大的 XML 文档。您的减速不会出现在内存使用或解析速度上,而是出现在您的应用程序逻辑上。

关于php - SimpleXML 与 DOMDocument 性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9367069/

相关文章:

c# - 如何将 RSS 功能添加到我的网站?

php - 访问 ID/GUID 属性 isPermaLink

php - 在 IE 8 中遇到问题对象需要错误,灯箱在 IE 8 和 IE 7 中不起作用

php - 将选择框中的多个值插入到单独的行中

performance - Cortex M4 LDR/STR 时序

Javascript iframe 速度问题

PHP 检查指定输入的电子邮件和 ID 是否与数据库中的匹配

php - 我正在尝试使用 mdbootstrap 中的 datepicker 但日期在数据库中显示为 0000-00-00

javascript - 优雅地处理复选框

java - RSS AsyncTask - ArrayAdapter 未定义