重用DOMDocument或创建新文档的性能影响

时间:2011-01-19 18:13:37

标签: php performance dom

假设您有一个页面,其中包含对此innerHTML函数的多次调用:

<?php
function innerHTML($node){
  $doc = new DOMDocument();
  foreach ($node->childNodes as $child)
    $doc->appendChild($doc->importNode($child, true));

  return $doc->saveHTML();
}

这将导致生成12个DOMDocuments。是否值得保存对1 DOMDocument的引用并且每次使用时不断清理它?如果是这样,最有效的清洁方法是什么?

2 个答案:

答案 0 :(得分:2)

为什么不创建DomDocumentFragment

function innerHTML($node){
    $fragment = $node->ownerDocument->createDocumentFragment();
    foreach ($node->childNodes as $child) {
        $fragment->appendChild($child);
    }
    return $node->ownerDocument->saveXml($fragment);
}

它具有更好的语义含义IMHO,并且还使您不必将节点导入新文档(根据节点具有的子节点数量,这可能会很昂贵)。

就性能水平而言,每个调用花费大约0.00005秒,与使用哪个函数无关(它们彼此之间存在误差)(基于快速测试)。所以不要过分担心它,但也不要做太多必要的事情......

答案 1 :(得分:1)

我认为没有任何性能问题; DOMDocument在创建时不解析任何XML。我认为整个过程中处理最密集的操作是saveHTML(),因此您不会使用相同的DOMDocument来保存任何内容。

销毁对象并创建一个新对象可能比保留全局变量并在每次使用时清空它更有效。