2012年08月26日
XMLDOM 処理の最適化
XMLDOM 処理においても、最適化することができます。
処理速度が遅いなと感じていたら、実施してみましょう。
DOM ノードは、完成してから DOM ツリーに追加する。
DOM ノードを作って、すぐに DOM ツリーに入れたがるのはわかります。
処理中にエラーが発生した場合でも、確実に DOM ツリーに残しておきたいからです。
Dim xmlNode
Set xmlNdoe = xmlDoc.CreateElement("node")
xmlDoc.AppendChild xmlNode
xmlNode.SetAttribute "attr", "value"
xmlNode.NodeValue = "nodevalue"
最初に xmlNode で要素を作っておき、DOM ツリーに追加してから、
各プロパティを設定する方法です。
呼出元全体を On Error Resume Next にしておけは、エラー発生時点までの
XML 構築結果が反映されます。
ただし、この場合、 DOM ツリーに対してのノード操作が発生します。
たとえば XML スキーマや DDT などの整合性チェックは、この時点で発生しますので、
SetAttribute や NodeValue の実行ごとに整合性チェックが動くことになります。
これを要素ノードに設定してから DOM ツリー追加を行なうと、
DOM ツリー追加処理の時点で1回のみ、整合性チェックが行なわれることになります。
こちらのほうが効率的ですよね。
Dim xmlNode
Set xmlNdoe = xmlDoc.CreateElement("node")
xmlNode.SetAttribute "attr", "value"
xmlNode.NodeValue = "nodevalue"
xmlDoc.AppendChild xmlNode
もちろん、用途に応じてなので、DOM ツリーへの追加を確実にしたい場合は、
最初に DOM ツリーに追加されているほうがいいと思いますが、
その分の速度が犠牲になっていることを認識いただければと思います。
小さな DOM ツリーでは大きな問題は発生しないと思います。
また、もし DocumentFragment も検討材料に入れられるならば、
ぜひ検討しましょう。
{a8.net http://books.livedoor.com/item/3260563}
{a8.net http://books.livedoor.com/item/1872196}
処理速度が遅いなと感じていたら、実施してみましょう。
DOM ノードは、完成してから DOM ツリーに追加する。
DOM ノードを作って、すぐに DOM ツリーに入れたがるのはわかります。
処理中にエラーが発生した場合でも、確実に DOM ツリーに残しておきたいからです。
Dim xmlNode
Set xmlNdoe = xmlDoc.CreateElement("node")
xmlDoc.AppendChild xmlNode
xmlNode.SetAttribute "attr", "value"
xmlNode.NodeValue = "nodevalue"
最初に xmlNode で要素を作っておき、DOM ツリーに追加してから、
各プロパティを設定する方法です。
呼出元全体を On Error Resume Next にしておけは、エラー発生時点までの
XML 構築結果が反映されます。
ただし、この場合、 DOM ツリーに対してのノード操作が発生します。
たとえば XML スキーマや DDT などの整合性チェックは、この時点で発生しますので、
SetAttribute や NodeValue の実行ごとに整合性チェックが動くことになります。
これを要素ノードに設定してから DOM ツリー追加を行なうと、
DOM ツリー追加処理の時点で1回のみ、整合性チェックが行なわれることになります。
こちらのほうが効率的ですよね。
Dim xmlNode
Set xmlNdoe = xmlDoc.CreateElement("node")
xmlNode.SetAttribute "attr", "value"
xmlNode.NodeValue = "nodevalue"
xmlDoc.AppendChild xmlNode
もちろん、用途に応じてなので、DOM ツリーへの追加を確実にしたい場合は、
最初に DOM ツリーに追加されているほうがいいと思いますが、
その分の速度が犠牲になっていることを認識いただければと思います。
小さな DOM ツリーでは大きな問題は発生しないと思います。
また、もし DocumentFragment も検討材料に入れられるならば、
ぜひ検討しましょう。
{a8.net http://books.livedoor.com/item/3260563}
{a8.net http://books.livedoor.com/item/1872196}
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image