jsdom と libxmlext のベンチマークとったよ!

node.js において jquery-ish な css selector をもちいた検索をしたい、という場合、jsdom がオススメされることがおおいのだが、jsdom は pure-js で実装されているせいか、あまり高速ではない。体感速度からして、あきらかにおそい。

どのぐらい遅いのかということを、libxmlext と jsdom のベンチマークをとることによりためしてみる。

jsdom x 6.43 ops/sec ±7.28% (17 runs sampled)
libxmlext x 168 ops/sec ±2.93% (55 runs sampled)
Fastest is libxmlext

libxmlext の方が 26倍はやいようだ。

利点と欠点の比較

jsdom の利点は

欠点は

libxmlext の利点は

欠点は

まとめ

クローラーとか書くなら libxml つかわないと速度でないし、node.js つかってることによって I/O 多重化にかんするメリットが jsdom をつかうことにより CPU 時間をつかわれまくって意味がないかんじになるので、jsdom はカジュアル用途以外ではオススメできないと感じる。

具体的にいうと、367個の HTML ファイルを操作したい、というようなレベルの要求レベルでも jsdom だと遅くてやってられんわーという気分になるレベル。というかそれが嫌になって他の手段をさがしたぐらいのかんじである。

なお同等な機能をもつものに nquery があるが、これは find などにかんしては非常によくうごくのだが、破壊的操作をサポートしていないのでつかえない。

Published: 2011-12-12(Sun) 23:45