12時13分10秒 [Perl/CGI]
ウェブページを構成するファイルのうち、特定のファイルの読み込みが遅延した場合にページ全体の描画がどうなるかを実験するため、特定のファイルのダウンロードだけをわざと指定秒数ほど遅延させるスクリプトを書いてみました。
なかなか面白いです。
遅延させる方法はとても原始的で、Perlのsleepを使うだけ。
CGIにパラメータで遅延秒数を送ると、HTTPヘッダを出力した直後に指定秒数だけスリープさせて、その後にデータを送信するだけのスクリプト。
この実験では、ファイルがローカルにキャッシュされると困るので、HTTPヘッダにキャッシュを拒否する記述を追加。こう書いていてもこっそりキャッシュしちゃうブラウザとかあるかな?……と思ったんですが、少なくともメジャーなブラウザ(IE、Firefox、Safari、Chrome)はみんな律儀にキャッシュしないでくれました。(笑)
まあ、そりゃ当然か。^^;
最初は、あらかじめ決まった特定のファイルのダウンロードをわざと遅延させるだけのスクリプトだったんですけども、もっと汎用的にどんなファイルでも指定できるように書き直してみました。元ファイルの種類に合わせてHTTPヘッダのContent-typeの値もちゃんと変わるようにしてみたり……。
実験するためのスクリプトなのでスクリプトそのものではなく結果だけが重要なんですけども、ついつい書くのが楽しくてプログラムソースばっかりいじってしまう……。(^_^;;;
せっかくなので、そのうち公開しよう。
で、どうも実験結果が想定とかなり違います……。
実行するたびに実験結果が微妙に異なるんですよね。おかしいなあ……と思って詳しく調べてみると、同時に複数個を並列して実行させているスクリプトのうち、後半あたりが「503 Service Temporarily Unavailable」になって正しく動いていなかったのでした。
レンタルサーバじゃなくて、自前のサーバを使わないとダメだったか。^^;;;
普段ローカルで確認する必要のあるCGIって、AN HTTPDを使えば済むようなものばっかりだったので、Apacheを使ったウェブサーバ環境はローカルには用意していないんですよね……。昔はあったんですけども。
今回のスクリプトは、.htaccessも使うのでAN HTTPDではちょっと面倒。(面倒なだけでソースを修正すれば不可能ではありませんけども。)
どうしようかな……?と思うこと数秒、そういえばレンタルサーバって2つ契約していたんだったと思い出しました。^^;
2つ契約しているものの均等に分散はできていなくて、ほとんど1つ目のサーバに負荷が集中してるのです(改善したいとは思ってるんですが)。
というわけで2つ目のサーバを使ったら問題なく実験できました。やっぱり1つ目のサーバは余力がないんだなあ……。
結局、実験結果そのものも想定とは微妙に異なるものだったため、ちょっと今後の予定が狂うんですが、これはこれでとても興味深い結果だったので、実験して良かったとは思いました。
めでたし。めでたし。
この日記へのコメントはお気軽に! コメント数:0件
コメント数: 0件