2011-01-19 5 views
1

はあなたが複数のこのinnerHTMLプロパティ関数の(12)の呼び出しを持っているページがあるとしましょう作成:パフォーマンスの再利用のDOMDocumentの影響か、新しい

<?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

私は両方のアプローチを試してみると思います。 (結局のところ、あなたが測定できるものを見積もるのはなぜか) –

+0

私は現在の方法が最高だと思っています。私はそれに固執します:) – mfonda

+0

私は簡単なテストをセットアップできますが、少なくとも私にとってはこれは何か私はパフォーマンスの問題が発生するまでそのまま残しておきます。 –

答えて

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秒かかる(クイックテストに基づく)。だから、あまり心配する必要はありませんが、必要以上にそれをしないでください...

関連する問題