Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: perl -d:DProf (Re: HACKING-ja -> mknmz.in)
寺西です。
Tadamasa Teranishi wrote:
>
> SATOH Fumiyasu wrote:
> >
> > ここで "/o" モディファイアを使うのはまずいですね。(^^;
> >
> > 代わりに、new() と addSpecials() されたときに、qr// でコンパイル
> > しておくとどうでしょう?
> >
> > my $token = '(' .
> > (join '|', sort {length($a) <=> length($b)} @{$self->{SPECIALS}->{$type}})
> > . ')';
> > $self->{SPECIALS_RE}->{$type} = qr/$token/mg;
> > ...
> > if ($tdata =~ $self->{SPECIALS_RE}->{$type}) {
> > ...
> > }
qr// に g は付けられないので、結局
my $token = '(' .
(join '|', sort {length($a) <=> length($b)}
@{$self->{SPECIALS}->{$type}})
. ')';
$self->{SPECIALS_RE}->{$type} = qr/$token/m;
...
if ($tdata =~ /$self->{SPECIALS_RE}->{$type}/g) {
...
}
としました。
検証は namazu-devel-ja を mhonarc で変換した HTML ファイルで行いました。
結果は、データに依存しますので、あくまでも参考程度に。
ちなみに Namazu は 2.0.12 を使いました。
<変更前>
Total Elapsed Time = 284.0637 Seconds
User Time = 255.9837 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
29.6 75.89 75.894 3108 0.0244 0.0244
File::MMagic::checktype_data
14.3 36.66 35.462 603816 0.0001 0.0001 mknmz::hash
11.0 28.39 28.349 25708 0.0011 0.0011 mknmz::wordcount_sub
6.19 15.84 50.798 3044 0.0052 0.0167 mknmz::make_phrase_hash
5.53 14.15 22.564 4 3.5380 5.6409 mknmz::write_index_sub
4.46 11.42 18.158 4 2.8561 4.5396
mknmz::write_phrase_hash_sub
3.62 9.272 47.089 3044 0.0030 0.0155 mknmz::count_words
3.30 8.458 8.454 2853 0.0030 0.0030 Text::Kakasi::do_kakasi
2.84 7.269 7.055 107286 0.0001 0.0001 mknmz::get_last_docid
2.34 5.979 5.166 407147 0.0000 0.0000 mknmz::readw
<変更後>
Total Elapsed Time = 270.4684 Seconds
User Time = 257.6503 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
28.7 74.04 74.045 3108 0.0238 0.0238
File::MMagic::checktype_data
14.1 36.53 35.634 603816 0.0001 0.0001 mknmz::hash
11.0 28.53 28.501 25708 0.0011 0.0011 mknmz::wordcount_sub
6.27 16.14 51.394 3044 0.0053 0.0169 mknmz::make_phrase_hash
5.59 14.39 22.833 4 3.5991 5.7082 mknmz::write_index_sub
4.40 11.34 18.491 4 2.8352 4.6228
mknmz::write_phrase_hash_sub
3.57 9.197 46.999 3044 0.0030 0.0154 mknmz::count_words
3.13 8.059 8.056 2853 0.0028 0.0028 Text::Kakasi::do_kakasi
2.93 7.539 7.379 107286 0.0001 0.0001 mknmz::get_last_docid
2.25 5.809 5.199 407147 0.0000 0.0000 mknmz::readw
数回テストしたところ、File::MMagic::checktype_data は 2% ぐらいは
速くなりました。(ほんのわずかですね。)
プログラムの実行速度は数パーセントの揺れがあるので、上記の結果だと
変更後の方が遅いように見えますが、そのようなことはありません。
平均すると File::MMagic::checktype_data 分は速くなっているようです。
ただし、qr// は Perl 5.005 以降しか使えないので、このままこの修正を
するわけにはいかないでしょうね。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E