プロが教える店舗&オフィスのセキュリティ対策術

変な質問かも知れませんが宜しくお願いします。
CGIを作り、改良や新機能を追加するごとにスクリプトが膨らみ
ファイルサイズが大きくなってしまいます。
その負荷を抑えるために、よく、
if分岐で必要に応じたパーツをrequireで読み込んで使っています。
これはとても効果があって本当に頻繁に使うのですが、
今回、モジュールを使いたいと思っています。
しかし、モジュールを使うときには、
useで宣言するのですよね?
これでモジュールをインクルード出来る。と本には説明されています
問題はこのとき、結構な容量のあるモジュールをuseで宣言すると、
例えば、50kbの本体プログラムで 100kbのモジュールを使うと
宣言すると、もれなく150kb分のプログラムを動かしている状態に
なってしまうのでしょうか?
データベースなどを取り扱いたいのですが、use宣言しただけで
大きなモジュール分の負荷がかかるのであれば、悩みます。
どなたかお教え下さい。
また、こういう場合でも動作を軽くする方法があれば、そちらもお教え下さい。

データベースを使って処理するのと、面倒でも1ファイルずつOPEN、closeで
split処理してデータを取るのとどちらが良いかかなり悩んでいます。
今回扱うデータがかなりの大きさになるもので・・・^^;;

変な質問ですが宜しくお願いします。

A 回答 (2件)

こんにちは。



サーバへの負荷を考える場合、ファイルサイズはそんなに重要なことでしょうか??
ieyasuさんがどのくらいのスペックのサーバをお使いかわかりませんが、少々のファイルサイズを気にされるのであれば、サーバのアップグレードの方が現実的だと思います。
それともM単位に及ぶほどのcgiなんでしょうか?
問題はファイルサイズよりプログラムの内容です。

モジュールはプログラムを効率よく使うためのツールだと認識しています。
モジュールを使うことによる負荷より、そのモジュールと同じことをプログラムに記述して実行する負荷の方が大きいと思います。
時間のかかる処理でしたら、モジュールを使う方が負荷も少ないと思います。

扱うデータがかなりの大きさになるってことですが、具体的にどのくらいでしょうか?
ヘタにデータベースを使うとテキストファイル等で処理するより効率が悪くなる場合もありますが、かなりの件数ってことでしたらデータベースを使われた方がその後の拡張もしやすいはずですし、検索スピードも速くなります。
100M超えるようなファイルになってくると、書き込むだけで結構負荷もかかるし安定性も悪くなると思うんですけど...。
ヘタにテキストで作ってしまって、後からデータベースに移行するのがめちゃめちゃ大変だったこともあります。

どのデータベースをお使いになるかによってまた変わってきますが、モジュールによってスピードが速いものもあったりします。
少々のモジュール使用での負荷より、恩恵の方が大きいと思いますよ。
    • good
    • 0
この回答へのお礼

丁寧なご教授ありがとうございます。
プログラムが、ゲームCGIで、頻繁に更新するタイプの物ですので
毎回50KB読み込むのと、150KB、200KBと多く読み込むのでは
かなりスピードに差がでているのが現状なのです。
プレイヤーのコマンド次第では、最小20~30KB程度のプログラム実行で
済ませるのが理想なのです。
細部にわたって、if(!$~)を unless($~)に変えるとか、
リファレンスを使ってメモリ節約するといいのかもしれませんが。。。
現在レンタルサーバーで、現行のものですら負荷限界の連絡を受けているもので、
モジュール使用でどう変わるのかに関心がありました。

結論としましては、スピードの優劣はどうであれ、インクルードするというのは
モジュール分のスクリプトを上乗せした、と考えれば良いのですね?
もしかして、useも、requireと同じく、プログラムの途中で
if(~・・・){use~・・・}
と条件分岐で使用する、ということも可能なのでしょうか? 

お礼日時:2002/03/23 14:12

こんにちは。



>インクルードするというのはモジュール分のスクリプトを上乗せした、と考えれば良いのですね?
それはちょっと違います。
特に宣言しただけで上乗せ、というのはかなり誤解だと思います。
語彙不足でなんと説明したらぴったりくるのか分からないのですが...。

お礼の内容からして、かなりスピードに悩んでらっしゃるようですね。
スクリプトをコンパクトにするというのも一つの手なのですが、FirstCGIなんかで常駐させるともうちょっと速くできます。
あとはPHPを使うとか...。
あくまでperlでということであれば、FirstCGI+PostgreSQLまたはMySQLの方が、かなりなデータ容量でしたらより速くできるのではないでしょうか?
データベース接続のモジュールもDBI+DBDなどはある程度速いと思われます。

参考URL:http://member.nifty.ne.jp/hippo2000/perltips/
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!