趣味のプログラム工房

Perl負荷軽減

Perlの負荷軽減を考えてみました。(について調べてみました。)。
まず、コードをファイルに分割して、必要分だけ読み出すのがいいようです。
というのも、Perlは実行時に評価(コンパイル)するので読むコードが短い方がいいのです。(コンパイル処理の軽減)。

例1
処理をサブルーチンに分けて、
if( = 1){
require('./file_a.cgi');
&sub_a;
}else{
require('./file_b.cgi');
&sub_b;
}
などとすると、.cgiのコードしか読み込まれませんので軽くなります。

ただし、
require('./file_a.cgi');
require('./file_b.cgi');
if( = 1){
&sub_a;
}else{
&sub_b;
}
とすると、最初に両方のコードを読み込んでしまうので負荷軽減にはなりません。
(負荷軽減に取り組むまで私はこういうコードを書いてました。汗)

また、ファイルからの読み込みは1行ずつが早いみたいです。(必要メモリの削減)
例2
open(IN,"file.txt");
@buf = ;
close(IN);
foreach (@buf){
print ;
}
上記のコードはファイルの内容をすべて変数に格納して処理しています。
これだと、バッファ用の変数に多くのメモリを割り当てる必要があるため負荷が掛かります。
また、配列の処理にも負荷が掛かるようです。

例3
open(IN,"file.txt");
while (){
print ;
}
close(IN);
上記のコードはファイルから1行ずつ読み込んでいます。
こちらの方が処理が早く負荷も圧倒的に少ないです。
(まあ、単純に表示するだけならの話で、処理によっては例2でやらなければいけないことや、例2の方が早い場合もあると思いますが)