【问题标题】:Performance Implications of Reusing DOMDocument Or Creating a New One重用 DOMDocument 或创建新文档的性能影响
【发布时间】:2011-06-11 23:03:15
【问题描述】:

假设您有一个页面有多个 (12) 调用此 innerHTML 函数:

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

  return $doc->saveHTML();
}

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

【问题讨论】:

  • 我很想尝试这两种方法。 (毕竟,为什么要估计你可以测量的东西。)
  • 我认为目前的方式是最好的,我会坚持下去:)
  • 我可以设置一个简单的测试,但至少对我来说,这似乎是很多人已经做过/正在做的事情。我想我会坚持让它保持原样,直到我达到性能问题。

标签: php performance dom


【解决方案1】:

为什么不直接创建一个DomDocumentFragment

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

恕我直言,它具有更好的语义含义,并且还使您不必将节点导入新文档(这可能会很昂贵,具体取决于节点具有的子节点数量)。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2013-12-01
      • 2011-01-01
      相关资源
      最近更新 更多