2011-01-19 40 views
1

假設你有一個具有多個(12)本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的引用並不斷清理每個用法值得嗎?如果是這樣,清潔它的最有效的方法是什麼?

+0

我會忍不住去嘗試這兩種方法。 (爲什麼估計你可以測量的,畢竟) – 2011-01-19 18:21:44

回答

1

我不認爲有任何性能問題; DOMDocument在創建時不解析任何XML。整個事情中處理最密集的操作我認爲是saveHTML(),所以您不會使用相同的DOMDocument保存任何內容。

銷燬對象並創建一個新的可能比保持一個全局變量和清空它在每次使用更有效率。

2

爲什麼不創建DomDocumentFragment

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

它具有更好的語義恕我直言,也節省了您不必節點導入到一個新的文檔(這取決於兒童人數的節點有可能會貴一些)。

至於性能水平而言,每次通話花了約0.00005秒,這獨立的使用功能(他們是錯誤的相互保證金)(基於快速測試)。所以不要太擔心,但也不要做超過必要的...