HTTPサーバーとWeb開発

43. パーシスタントCGI のテクニック

CRTPGM を実行し、ACTGRP(*NEW) ではなく ACGRP(*CALLER) で作成されたCGIパーシスタントCGI と呼ぶ。
パーシスタントCGI は毎回、呼び出される都度、初期化されるのではなく、メモリに常駐して即座に実行されるためパフォーマンスの改善にはかなりの効果を発揮する。

この動作原理は Microsoft IIS のサーバー・エクステンションや、サーブレットJava とほぼ同じものである。
サーブレットJava はこの永続性が注目されたが、実はパーシスタントCGI とすれば RPG-CGI であっても同じことを実現できる。

但しパーシスタントCGI を使う上で、次のことに注意を要する。

初期化はただ1度だけである。

よって *INZSR や最初だけに行う処理は CGI が最初にロードされたときだけであることに注意して、対応した CGI にしておくこと。

標準出力の重複への対策

C 言語であれば fflush(stdout) によって標準出力をクリヤーするように IBM は明記しているが、これはほとんど効果がない。
むしろ前回のHTML出力が次々と重複して出力されてしまうというバグがある。
これを回避するには、
最初のHTML出力では先頭に文字列<!-- を入れておいて、2回目以降のHTML出力ではやはり先頭に

 -->
<!-- 

を出力するようにすると良い。
これによって重複したHTMLは すべてコメントとしてWEBブラウザに解釈されて結果的に最後のHTMLだけが有効なものとして表示される。
HTMLが次々と増えていくのはいただけないが、それでも *NEW でコンパイルされたCGI に対しては *CALLERであるパーシスタントCGI はパフォーマンスに効果を発揮する。
但しパーシンタントCGI を利用するには、iSeries400 は24時間稼動ではなく、定期的にHTTPサーバーを再起動すべきである。