- 締切済み
カウンターが重い
アクセスカウンターを作ってみたんですが、重いんでなるべく軽くしようと試行錯誤しているんですが、上手い手を思いつきません。何か良いては無いでしょうか? ちなみに、各ページごとのカウントをとりたいので、 <img src="****.cgi" width=0 height=0></img> として埋め込んでます。(もしかしてこれが悪い?) 後で見やすくしかも、簡単にとおもいテキストに日付毎に入れてるんですが、軽くするためにどうしてもやりたいけどやり方が分からないのが二つあります。 1.テキストファイルの上に行を付け足す。 今は中身を一回全部@に入れて”unshift”で最初に付け足して再度書き込むという非常にめんどくさい方法をしてます。 出来れば”seek”か何かで最初だけ読み込み、そこだけ変更するかその上(前?)に付け足方法が分からないんです。 2.もしくはテキストファイルの一番下を読み込む。 上が出来ないとき、一番下を読み込んで書き換えるか追加書き込みで付け足すということをしたいんです。 しかし、徐々に増えていく行の一番下を上手く読み込む方法と、全部を読み込まずに一番下だけ書き換えする方法が分からないんです。 これ以外に軽くするいい方法があるか、上の難問(?)が分かる方、回答ください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- rokujiro
- ベストアンサー率53% (17/32)
無理に自分で作成せず実績の有るフリーのCGIを使用する事をお勧めします。 検索エンジンで CGI カウンタ 複数 等で検索するといくつか出てくると思います。 あと、ひとつのログファイルで複数のページのカウンタを取ろうとしているようですが逆に複数のログファイルを作成し、それをひとつのCGIで管理すると言う方法は如何でしょうか!? counter.cgi?file=site1 counter.cgi?file=site2 といった形です。 如何でしょうか!?試してみる価値はあると思います。
- caramel
- ベストアンサー率34% (10/29)
答えとしてはどうかとは思いますが、、お使いのプロバイダは「CGIに強い」ところでしょうか? perlのことはぜんっぜん判りませんが、同じスクリプトを設置してもプロバイダによって表示速度は全く違います。 もちろんご存じの上で解決法をお探しのこととは思うのですが、、、 同じスクリプトを数カ所に設置した実験をしたことがあるものとしての体験談でした。自分の使った中ではやはりドルフィンネットでしたが、、 勉強のため皆様のご回答を私も拝見させていただきたく思います。お邪魔いたしました。
- 参考URL:
- http://www.din.or.jp
お礼
返事が遅れてすいません。 「CGIに強い」というのは、プロバイダ側のサーバーのスペックとか、そこに置かれてるCGI等の数のことによって決まることだと思うんですけど・・・・ (それともサーバーのOSや、ハードの種類やそれ以外?) とりあえず、まだサーバーの方には上げてません。自分のPCにHTTPDを入れて擬似サーバーにして、そのPC上で動かしてます。 掲示板や自作、他作のCGIを動かしていたんですが、自作カウンターを動かした時、掲示板などより重くて、”何で?たいした処理して無いじゃん!!なんか書き方おかしかった?” とちょっとパニくってました(笑) 自分で解決法を考えたんですが(質問に書いたこと)、どうやればそれを実行できるか分からなくて質問したんです。 なにか分かったらまた書き込んでください。
- mamorukatou
- ベストアンサー率40% (37/92)
私もPerlは初心者なので詳しいスクリプトは解りません。 ご希望に添えるかは分かりませんが、現在のカウント数と過去の カウント数がわかればよいのであればファイルをカウンタ用の ファイルと、ログ用のファイルの二つに分けてはどうでしょうか? つまり 1.アクセスされたときカウンタ用ファイルの日付と現在の日付を比較 2.日付が変わっていたらログ用ファイルの末尾にカウント数を追記 3.カウンタ用ファイルを新しいカウンタ数で置き換える といった流れです。 今までの処理速度とファイルを余計に開く時間どちらが効率が 良いかは不明ですが・・・
お礼
返事が遅れてすいません。なにぶん家のPCではないもので・・・(家のは古くてオブジェとなってる(笑)) 結構盲点の内容でした、目からウロコが2・3枚落ちた感じです。 早速試してみます。
妥協してでも軽くしたい、ということであれば、SSIにしてテキスト文字でカウンタを付ける手があります。 スタイルシートなんかを使えば、テキスト文字でもそこそこカッコいいカウンターになりますし。 お使いのプロバイダはSSIは使えますか?
お礼
さっそくの回答ありがとうございます。 残念ながらSSIは使えないんです。 セキュリティの面で許可してないそうなんです。
お礼
返事が遅れてすいません。 回答ありがとうございます。説明が不明確だったようなので少し補足します。 複数のページのログを一つのログファイルでとろうとはしていません。 (そうすると排他処理の関係もあって、遅くなるだろうし動作が不安定になりそうだから) ですから、一つのページに一つのログファイルなのですが、そこに過去のログも保存しておきたいと思っています。(一日単位で) しかし、全部を読み込んで一部を変えるのは出来るのですが、いちいち全部を読み込むのは時間のロスになるので、最新の日付だけを読み込んで、同じ日付だとその日のカウントを1上げる。違う日付だと新しく付け加えるという作業をさせたいのですが、それが上手くいきません。 それを何とかする方法を教えてもらいたいんです。 これでなんとか上手くいったら、書かれているような方法でアクセス集計をしたいと目論んでいるんですが、なにぶんそこまでがなかなか行かなくて(笑)