namazu-dev(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

lex



今頃になって気づいたのですが、 lex を使った結果出力はかなり
遅いです。2,000件くらいヒットした検索結果を namazu -a ですべ
て出力すると、手元の環境では約 20秒もかかります。
v1.4.0.8-beta-8 なら 1秒-5秒程度です。 (キャッシュの効き具合
に左右される)

古い実装では検索結果を出力するために NMZ.f, NMZ.fi だけをア
クセスすればよかったのに対し、新しい実装では NMZ.result,
NMZ.field.*, NMZ.field.*.i をアクセスする必要があるので遅く
なるのは仕方がないのですが、いくらなんでも 20秒は遅すぎでは
ないかと。

試しに、結果出力に必要な NMZ.result, NMZ.field.*,
NMZ.field.*.i を読み込んで、 yylex() に通さず、単純に printf 
するようにしたら、 約 8秒で処理が完了しました。

つまり、 yylex() に約 12秒もかかっている計算になります。とい
うわけで、lex を使うのはやめて、自前で NMZ.result 用の
scanner を用意したいと思います。

# 2,000件だから遅すぎると感じるのであって、20件、100件程度だっ
# たら lex を使った scanner でも充分なんですけどね。

-- Satoru Takabayashi