HTTPサーバーとWeb開発

27. CGI は何故遅いのか?

ようやく実用的なCGIを開発してもいざ実行してみると予想以上に遅いので驚いたことはないだろうか?
何故 CGI の実行はこのように遅いのだろうか?

最初にリリースされた V3R2M0 や V3R7M0 では CGI の標準出力はスプールをファイル QTEMP/QATMHSTOUT に一旦出力されてそれをさらに読んで EBCDIC/ASCII 変換されていた。これでは遅くなるのは無理がない。V5R1M0 になった後でも EBCDIC/ASCII 変換にかなりの時間がかかっている。

IBM は CGI を CRTPGM で活動化グループを *NEW ではなく *CALLER としてパーシスタント CGI として再呼び出しを HTTP サーバーがしなくても済むように推薦しているが、遅さの大半の原因は HTTPサーバーである。また パーシスタントCGI に変更すると思わぬ問題点が発生して CGI が期待とおりに動作しなくなることがある。さらにCGI を再コンパイルして入れ替えたいときはHTTPサーバーを一旦停止させなくてはならない。これは運用上では致命的な問題である。
また単にコード変換だけとは思えない遅さがある。事実 V3R7M0 である CGI を実行したところ、10分も応答時間がかかった例がある。
しかし、後に紹介する方法で潟Iフィスクアトロでは IBM HTTPサーバーのパフォーマンスを100倍以上に向上させることに成功した。この方法では Model 150 Entry V3R7M0 で数秒の応答でHTML が戻ってきた。旧リリースであっても工夫さえすれば十分なパフォーマンスを得ることができるのである。