• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ライブラリと処理速度について)

ライブラリと処理速度について

このQ&Aのポイント
  • 多人数同時参加型オンラインRPGのCGIの処理速度を改善する方法として、サブルーチンをライブラリファイルに分割することが挙げられます。
  • ライブラリファイルに分割することで、プログラムの管理が楽になるだけでなく、処理速度の向上も期待できます。
  • ただし、実際に速度が上がるかどうかは使用するプログラミング言語やコードの実装方法によりますので、詳しい方にアドバイスを求めることをおすすめします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

そうですね。ただ、発言ランキングのときはまあ別のcgiにすればいいという 話もあります。 ええと、例えばちょっと凝ってるページなので、IE用とNN用で出力の内容を変 えているとします(Javascriptやら特殊なタグを使っているなどで)。 if($ENV{HTTP_USER_AGENT} =~ /MSIE/) { print "<TABLE..."; } else { print "<HR>..."; } などのように。この例ではifで条件分岐してますが、この処理が結構なボリュー ムがあるとしたら、まるごと別のサブルーチンにする手が考えられますね。 if ($ENV{HTTP_USER_AGENT} =~ /MSIE/) { &print_for_MSIE(); } elsif (... =~ /Mozilla/) { &print_for_Netscape(); } else { &print_for_others(); } さらにこれらのprint_for_*ルーチンをすべてprint_pageという同じ名前 に変え、別ファイルにして保存しておけば、 if ($ENV{HTTP_USER_AGENT} =~ /MSIE/) { require "print_msie.pl"; } elsif (... =~ /Mozilla/) { require "print_netscape.pl"; } else { require "print_other.pl"; } &print_page(); という風に書く事が出来ます。ユーザがNetscapeでアクセスしたときはMSIE用 のコードを一切Perlに解釈させずに済むわけです。まあもっと良い例もあると 思いますが、とにかくこんな風な切り分け方はあり得ると思います。 それからmod_perlについてですが、簡単に言うとhttpサーバApacheの中に Perlを組みこんじゃうようなイメージでいいと思います。MS-Excelの中に VBAが入っているような、ブラウザの中にJavaScriptがあるような、Emacsの 中にEmacs-lispがあるような、そんな感じです。 CGIが早くなるというのはその機能の一部で、ApacheサーバをPerlで事細かに カスタマイズできちゃうぞ、というのがメインの目的です。 ですから言語としては、例えばPHPのように「Perlに似た新しいなにか」を覚 える必要はありません。Perlそのものです。当然CPANのモジュールなども今ま で通り使えます。 いままでのCGIプログラミングに比べて、ちょっと気をつけるべきところは ありますが(ヘッダーの問題とかグローバル変数を避けるとか)まあほとんど 修正せずにそのまま利用することが可能です(私が携わった業務では、URLの aliasを使って/cgi-bin/aaa.cgiで呼び出されたらCGIで、まったく同じ プログラムを/bin/aaa.cgiで呼び出されたらmod_perlで実行するようにして ました)。 CGIはhttpサーバから別のプロセスとして起動されますね。そしてそのCGIプロ グラムの仕事が成功に終わったり失敗に終わったりしてもとりあえず過去のこ とは綺麗さっぱり忘れて、また呼び出せば新たにスクリプトを読み、起動し、 再び仕事を始めます。 mod_perlだと、一度読みこんだプログラムはサーバに記憶されます。次に 呼び出したときにはPerlの起動やスクリプトの読みこみ時間が不用になります。 注意点としては、上記のようなメカニズムですから、グローバルな変数をうっ かり処理し忘れていたりするといつまでもクリアされずメモリが次第に増えて いくとか、バグがあってどうも妙な感じになったな、というときにはWWWサーバ ごと起動しなおしたりする必要があることでしょうか。 お気づきのように、Javaのサーブレットと同じような位置にあるものとも 言えますね。「Javaは遅いじゃん」「いやサーブレットとして使うならCGIよ りずっと」「mod_perlだったら?」「むむむ、でもスレッドを使えばやっぱ り…」とまあ、競い合ってるような状況ではあります。 で、肝心のieyasuさんの環境で使えるかどうかですが、mod_perl組みこみとして Apacheサーバをコンパイルし直す必要があると思います。httpサーバをインストー ルしなおせるかどうか、という話になりますね。そこまで自由なレンタルサー バは今時ならあるのでしょうか。ご興味がおありならプロバイダにそのあたり 確認してみてください。 mod_perlのメインサイトはApacheプロジェクトのページからもたどれますが http://perl.apache.org/ です。日本語で書かれた簡単な紹介ページもいくつかあります。 http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl.html

その他の回答 (1)

回答No.1

ご疑問ももっともだと思います。むしろPerlにとってはライブラリファイル の開け閉めの時間が余計に増えるわけですから、厳密に言えば むしろわずかに重くなるように思います。 その説明の言わんとしているところは、「不要なときはそのライブラリ を読みこまなくてすむことがある」ということなんじゃないでしょうか。 例えば、掲示板のCGIで、書きこみ用のサブルーチンなどを別ファイルに しておき、書きこみのときだけrequireするようにすれば、 単に閲覧するだけのときなどはそのサブルーチンをコンパイルする 時間が省略できるので少しだけ早くなるでしょう。 それくらいしか思いつきませんね。 状況、お察しします。CGIプログラムのレベルでできる、アルゴリズム だのによる工夫はすでに検討されていると思いますので、あとは、 処理を別のサーバに分散させるとか、そういった大きな変更しかない でしょうね。自前サーバであればmod_perlを導入すれば劇的に 変わると思いますが…。

ieyasu
質問者

お礼

ご丁寧にありがとうございます。 つまり、本体プログラムとそうでない部分(ユーザーごとに追加選択的に処理を行うような部分)は場合によっては切り離した方が若干なりとも速くなるって事ですね? たとえば、チャットCGIにおける、発言ランキングの別窓リスト表示部などがそうでしょうか? あと、mod_perlって何ですか?そんなに速いのですか? Perlとは違ったスクリプトを組むのでしょうか? 私は自前ではないですが、ホスティングサーバーを借りていて、結構自由度が高いんですが、その場合どうでしょう? って、質問ばかりすみません。。(^^;;

関連するQ&A