メモリを上手に使った掲示板


私は、ほとんど同じ方法で、 > ・別ファイルに投稿数を記録しておく の代わりに open(FILE, "FILENAME"); $count++ while(<FILE>); close(FILE); とやっています。遅くなるかと思いきや案外そうでもなく、 数万件の書き込みをすべて保存しているBBSで、特にスピ ードに問題なく安定して運用できています。 @comments = reverse(<FILE>); では、100件ならOKかもしれませんが数万件は無理でしょ う。そうでなくても上のようなコードはリソースを無駄に 食うので自分のサイトでリソースが余りまくってるならと もかく、プロバイダなどではやらない方が良いでしょう。 さて、私は表示させる際には、具体的には以下のようなコ ードを使っています。 ------------------------------------ $lpp = 10; # 1画面当たりの投稿数 $page = int($param{'page'}) || 1; # 表示したいページを取得(1ページ目なら1) $page = $page < 1 ? 1 : $page; # 0以下になるのを防ぐ。 open(FILE,$database); # 投稿ファイルをオープン $count++ while (<FILE>); # 総投稿数を数える return unless ($count); # 投稿がなければ終了 $first = $count - ($page - 1) * $lpp; # 表示したいページの先頭の投稿の行番号 $skip = $first - $lpp; # スキップしなければならない行数 $skip = $skip < 0 ? 0 : $skip; # スキップする行数がマイナスになるのを防ぐ $lines = $first - $skip; # 実際に表示される投稿の数 0 < $lines <= $ lpp seek(FILE,0,0); # ファイルを巻き戻す <FILE> while($skip--); # 目的の行まで読み飛ばす push(@line,scalar(<FILE>)) while($lines-- > 0); # 必要なだけ@lineに押し込む。 close(FILE); foreach(reverse @line){ # 表示ルーチン } ------------------------------------ てな感じです。