Category Archives: DOM

DOM

文字列からDOMの構築にかかる時間

tumblr経由でGreasemonkeyスクリプトのGM_xmlhttpRequestとかで取得したhtmlとかxmlをいじる場合はxpathだと遅いことが多いかも – さらさら宇宙忍法帖を読んで

というのと、実際の時間は2000ms vs 200msほどなんで、2秒待てる処理なら多少遅くたっていいじゃん、ってのもあるかもしれないです。いや2秒と0.2秒は体感できる違いだなぁ。。

体感でさすがに2秒もかかってない気がした(DOMの構築は同期的に行われるのでその間UIがフリーズするはずだけど、そういうストレスを感じてない)けどどれくらいかかっているのかも知らなかったので調べてみました。

実験

評価環境
2.16GHz/Core2Duo OSX10.4+Firefox3beta3
評価方法
AutoPagerize 0.23で文字列からDOMを構築しているcreateHTMLDocumentByStringの実行にかかっている時間をFirebugのconsole.time()+console.timeEnd()で測定

比較的こみいったHTMLになっているはてなブックマーク – 注目エントリーだと80msくらいでした。シンプルなHTMLのajax – Google 検索の場合10~15msくらい。

ついでにXPathのマッチングをしているところ、

        var page = getElementsByXPath(this.info.pageElement, htmlDoc)
        var url = this.getNextURL(this.info.nextLink, htmlDoc)

も測ってみました。はてなブックマークで3msでgoogle検索結果だと1msでした。XPathの評価はほとんど時間がかからないと思ってよさそう。FirefoxのXPathEvaluatorでもたしかにそんな感じのオーダーだった。

結論

DOMの構築はHTMLの複雑さにもよるけど10~100msのオーダーで終了する。AutoPagerizeは

document.createRange().createContextualFragment(str)

で文字列をDOMにしてるけど、元の記事ではinnerHTMLで変換したときの時間っぽいのでその差とかなのかも。