2004.10.15

ASP.netの事前コンパイル

ASP.net で開発していて我慢ならないことに
 毎度毎度 ブラウザ(IE)で見るたび各画面での1回目のアクセスが遅い
というものがあります。

ASP.netでの開発に携わった際に、その引っ掛かりを“気分的に”改善するスクリプトを考えましたので
紹介しておきます。


ForceCompile.vbs(事前強制バッチコンパイル)

使い方
 1.スクリプトファイルを Webサーバのどこか適当なフォルダにコピーする。
 2.ソース中に記述されている『ソリューション名(アプリケーション名)』を環境に合わせて書き換える。
 3.Webサーバで実行する。

 注-補足)
  ・localhost(Webサーバ本体)でしか実行できない。(制約)
  ・単純な Application構成にしか対処していない。(手抜き)
  ・サイトについても1個のみ対応。(手抜き)


このスクリプトが何をしているかというと『アプリケーション名』にひもづくフォルダ以下
見つけた限りの *.ASPX に対して勝手に1回目の HTTPアクセスを行うだけです。
リンクを追いかけて順序がどうとか、引数不足で内部エラーがあるとか、そういうことは一切考慮せず、
ただ闇雲に“1回目のアクセス/コンパイル”のみを行います。

ただ、これだけでも十分に効果があるものです。
勢いのそがれるタイミングで白い画面を見たくない場合に事前に実行しておくと良いでしょう。
なお、“1回目のコンパイル”に引っかかるのが、利用者で立ち上げたブラウザ(IE)なのか、
このスクリプトによるものなのかは実際のところ無関係ですので、スクリプトの実行完了について
律儀に待つ必要はありません。


また、運用環境で定期的に WEBサーバーを再起動する場合等については、
『タスク』の“コンピュータ起動時”にこのスクリプトを仕掛けると効果的だと思います。


もしかしたら、*.jsp なんかに関しても不満がある場合、流用できるかもしれませんね。

コメント (2)

JSPの場合
http://localhost:8080/jsp/sample.jsp
を初回からコンパイルなしで実行する場合
http://localhost:8080/jsp/sample.jsp?jsp_precompile=true
とすることで可能です。

どちらが便利かは環境、システムによりそうですが・・・

今頃だが、放置しっぱなしもなんなので補足しておきます。

最初の 1ページへのアクセスだけでも、サイトを全てコンパイルしてしまうというオプションは .NET Framework 1.0(VS.net 2003)にもあったらしいです。
web.configで以下のように設定する。
 <configuration><system.web><compilation batch="true" ... />(以下略)
http://msdn2.microsoft.com/ja-jp/library/s10awwz0(VS.80).aspx

既定値が trueなのは 2.0からではないかな。
ただ実際に使ったことがないので、動作に問題がないかは未確認ですが。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ichikawa