素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

$xは重い

$xは微妙に重い。$x自体は重くないけど、その後にforEachを使ったりすると重い。

$xがいったんdocument.evaluateをした結果をループで舐め回して、また$xの結果をforEachだとかなんだとかでループで舐めまわすのでループが2重になってしまう。

console.time('$x');
for(var i=0;i<10;i++)
$x('//a').forEach(function(){});
console.timeEnd('$x');

console.time('evaluate');
for(var i=0;i<10;i++){
var xpath=document.evaluate('//a',document,null,7,null);
for(var j=0;j<xpath.snapshotLength;j++)(function(){xpath.snapshotItem(j)})();
}
console.timeEnd('evaluate');

$x: 185ms
evaluate: 36ms

のような感じ。

XPathResultでもforEachとか使いたい - 素人がプログラミングを勉強するブログで書いたのは配列に入れないので速い。
でもevaluateの長い引数を書かなきゃいけなくなる。