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