変な質問かも知れませんが宜しくお願いします。
CGIを作り、改良や新機能を追加するごとにスクリプトが膨らみ
ファイルサイズが大きくなってしまいます。
その負荷を抑えるために、よく、
if分岐で必要に応じたパーツをrequireで読み込んで使っています。
これはとても効果があって本当に頻繁に使うのですが、
今回、モジュールを使いたいと思っています。
しかし、モジュールを使うときには、
useで宣言するのですよね?
これでモジュールをインクルード出来る。と本には説明されています
問題はこのとき、結構な容量のあるモジュールをuseで宣言すると、
例えば、50kbの本体プログラムで 100kbのモジュールを使うと
宣言すると、もれなく150kb分のプログラムを動かしている状態に
なってしまうのでしょうか?
データベースなどを取り扱いたいのですが、use宣言しただけで
大きなモジュール分の負荷がかかるのであれば、悩みます。
どなたかお教え下さい。
また、こういう場合でも動作を軽くする方法があれば、そちらもお教え下さい。
データベースを使って処理するのと、面倒でも1ファイルずつOPEN、closeで
split処理してデータを取るのとどちらが良いかかなり悩んでいます。
今回扱うデータがかなりの大きさになるもので・・・^^;;
変な質問ですが宜しくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは。
サーバへの負荷を考える場合、ファイルサイズはそんなに重要なことでしょうか??
ieyasuさんがどのくらいのスペックのサーバをお使いかわかりませんが、少々のファイルサイズを気にされるのであれば、サーバのアップグレードの方が現実的だと思います。
それともM単位に及ぶほどのcgiなんでしょうか?
問題はファイルサイズよりプログラムの内容です。
モジュールはプログラムを効率よく使うためのツールだと認識しています。
モジュールを使うことによる負荷より、そのモジュールと同じことをプログラムに記述して実行する負荷の方が大きいと思います。
時間のかかる処理でしたら、モジュールを使う方が負荷も少ないと思います。
扱うデータがかなりの大きさになるってことですが、具体的にどのくらいでしょうか?
ヘタにデータベースを使うとテキストファイル等で処理するより効率が悪くなる場合もありますが、かなりの件数ってことでしたらデータベースを使われた方がその後の拡張もしやすいはずですし、検索スピードも速くなります。
100M超えるようなファイルになってくると、書き込むだけで結構負荷もかかるし安定性も悪くなると思うんですけど...。
ヘタにテキストで作ってしまって、後からデータベースに移行するのがめちゃめちゃ大変だったこともあります。
どのデータベースをお使いになるかによってまた変わってきますが、モジュールによってスピードが速いものもあったりします。
少々のモジュール使用での負荷より、恩恵の方が大きいと思いますよ。
丁寧なご教授ありがとうございます。
プログラムが、ゲームCGIで、頻繁に更新するタイプの物ですので
毎回50KB読み込むのと、150KB、200KBと多く読み込むのでは
かなりスピードに差がでているのが現状なのです。
プレイヤーのコマンド次第では、最小20~30KB程度のプログラム実行で
済ませるのが理想なのです。
細部にわたって、if(!$~)を unless($~)に変えるとか、
リファレンスを使ってメモリ節約するといいのかもしれませんが。。。
現在レンタルサーバーで、現行のものですら負荷限界の連絡を受けているもので、
モジュール使用でどう変わるのかに関心がありました。
結論としましては、スピードの優劣はどうであれ、インクルードするというのは
モジュール分のスクリプトを上乗せした、と考えれば良いのですね?
もしかして、useも、requireと同じく、プログラムの途中で
if(~・・・){use~・・・}
と条件分岐で使用する、ということも可能なのでしょうか?
No.2
- 回答日時:
こんにちは。
>インクルードするというのはモジュール分のスクリプトを上乗せした、と考えれば良いのですね?
それはちょっと違います。
特に宣言しただけで上乗せ、というのはかなり誤解だと思います。
語彙不足でなんと説明したらぴったりくるのか分からないのですが...。
お礼の内容からして、かなりスピードに悩んでらっしゃるようですね。
スクリプトをコンパクトにするというのも一つの手なのですが、FirstCGIなんかで常駐させるともうちょっと速くできます。
あとはPHPを使うとか...。
あくまでperlでということであれば、FirstCGI+PostgreSQLまたはMySQLの方が、かなりなデータ容量でしたらより速くできるのではないでしょうか?
データベース接続のモジュールもDBI+DBDなどはある程度速いと思われます。
参考URL:http://member.nifty.ne.jp/hippo2000/perltips/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- バッテリー・充電器・電池 AC-DC電源モジュールの選択について教えてください 3 2022/04/24 11:44
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- 一眼レフカメラ SFP モジュールについて 1 2023/06/04 14:54
- ルーター・ネットワーク機器 PCをWI-FI化(現在は有線) 9 2023/01/16 08:20
- C言語・C++・C# C言語について。 3 2022/11/05 20:30
- ガスコンロ・IHクッキングヒーター・給湯器 シャープ製品JH-WB1821 と BCGシャープ共同開発品JH-WB182E の違いについて 1 2023/05/06 20:06
- Visual Basic(VBA) Excel VBAで教えてください 4 2022/05/11 22:20
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
テキストファイルで提出とは?
-
perlのflock関数でロックをかけ...
-
Perlで特定文字列から特定文字...
-
bashスクリプト
-
perlをバージョンアップしたら...
-
TeraPadエディターの操作方法に...
-
perlで自動ログインをしたいが...
-
perlの構文でカンマの意味が分...
-
Perl の外部モジュールの利用方法
-
Strawberry Perl for Windows ...
-
perl LWPでURLにアクセスした時...
-
Perlで、「が」を、「...
-
Perlで時間の計算
-
perlのプログラミング 部分入れ...
-
英数文字列のうちの数値を4桁に...
-
Perlの例文でif($a==1&&$b==5&&...
-
Wallpaper Engineでおすすめの...
-
openした後、closeしないでプロ...
-
perlで複数のファイルの処理に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
openした後、closeしないでプロ...
-
perlをバージョンアップしたら...
-
Perl の外部モジュールの利用方法
-
Perlのエラーについてご教授く...
-
テキストファイルで提出とは?
-
bashスクリプト
-
Windows10においての『Perl』の...
-
perlのflock関数でロックをかけ...
-
Perlで特定文字列から特定文字...
-
perlプログラミング 空白行削除
-
画像が表示でnull; this.src
-
ターミナルで特定の文字と文字...
-
Wallpaper Engineでおすすめの...
-
perl 正規表現でエラー
-
perlで複数のファイルの処理に...
-
perlでリテラル値はメモリにど...
-
このファイルを開く方法で困っ...
-
LinuxにおいてのPerlのプログラ...
-
PerlでUTF-8のファイルの文字列...
おすすめ情報