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サーバーを再起動すべきである。