mieki256's diary



2006/09/27(水) [n年前の日記]

#10 [hns] hnsのlog.cgiを修正

URL→名前変換用ファイル url_map.txt に記述するのが面倒。なので、正規表現で記述もできるように log.cgi を修正。

url_map.txt 内の文字列はハッシュに格納・比較に用いられているので、処理速度は速いはず。それを考えると、正規表現とループで比較するのは、速度的には改悪になる可能性が高いのだけど。ただ、 等を考えると多少はメリットがありそうだな、と踏んでの改造だったり。…実際どうなるかはわからないけど。遅くなりすぎて、後で戻すことになったりして。

修正箇所をメモ。 :

自分なりに色々手を入れたところがある log.cgi なので、公式に配布されてるものとは違ってる可能性も高いのだけど。一応メモ。

ファイル名や、ワークの確保。
# URL -> 名前 への変換マップ・ファイル(正規表現)
my $url_map_regexp = "$diaryDir/conf/url_map_regexp.txt";
my %urlnameregexp;

sub open_log { } 内に、ファイルを読み込む部分を追加。
    if (-f $url_map_regexp) {
        open(URLMAPREGEXP,"$url_map_regexp") || die "Can't Open URLMapRegexp File: $url_map_regexp: $!";
        while (<URLMAPREGEXP>) {
            CodeConv::toeuc(\$_);
            $urlnameregexp{$1} = $2 if (/^(\S+)\s+(.+)$/);
        }
        close(URLMAPREGEXP);
    }

sub referer { } 内のループ内に、比較部分を追加。
            # 正規表現でURL->名前変換
            my $refname = $_;
            my $fg = 0;
            foreach my $key ( keys %urlnameregexp ) {
                if ( /$key/ ) {
                    $refname = "  [regexp] " . $urlnameregexp{$key} . " [" . $1 . "]";
                    $fg = 1;
                    last;
                }
            }

            if ( $fg == 0 && exists($urlname{$_})) {
                $refname = $urlname{$_};
            }

sub recent_ref { } のループ内に、比較部分を追加。
            # 正規表現でURL->名前変換
            my $refname = $REFERER[$j];
            my $fg = 0;
            foreach my $key ( keys %urlnameregexp ) {
                if ( $refname =~ /$key/ ) {
                    $refname = "  [regexp] " . $urlnameregexp{$key} . " [" . $1 . "]";
                    $fg = 1;
                    last;
                }
            }

            if ($fg == 0 && exists($urlname{$REFERER[$j]})) {
                $refname = $urlname{$REFERER[$j]};
            }

比較用の記述ファイル。conf/url_map_regexp.txt。
b.hatena.ne.jp/keyword/(.*)$ はてブ:キーワード
正規表現部分と、名前を、スペースで区切って記述。後方参照用に1箇所だけ確保。

考えてみると、referer {} と recent_ref {} で、2回比較を行ってるんだな…。1回処理した結果をどこかに保存して、とかやれば、単純計算で、半分の処理時間で済みそうな。いや、それだとメモリを大量に使ってしまって、結局時間がかかってしまうかしら。

そもそも、どこらへんが処理速度のネックになってるんだろう。そこからしてよくわかってない。>自分。

サブルーチンの頭で利用する変数を宣言してるところが多々見られてなんとなく疑問を持った。 :

これを、実際に変数が使われるブロックの中で宣言するようにしたら、多少は速度的に改善されたりしないだろうか。Cなんかだとレジスタの活用等に繋がる云々、なんて話が大昔はあったような記憶もあるし。と思ったが、スクリプト実行に先立ってコンパイル(ていうのかこの場合?)する際に最適化がされていて、その手の改変はあんまり関係なかったりする可能性もあるな。というかそのぐらいのことはしてそうな気もする。>Perl。

以上です。

過去ログ表示

Prev - 2006/09 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project