ASP.NET 5 アプリケーションが Kudu によってどのようにデプロイされるのか調べた - しばやん雑記 を書いた時、Visual Studio の発行ダイアログにプリコンパイルオプションがあるのを見つけました。
プリコンパイル出来るのであれば、Roslyn のコンパイル速度に依存しなくなるのでいい感じがします。というわけでさっくり試してみました。
ログを見ると kpm pack のオプションとして --no-source を指定するとプリコンパイルになるようです。
パフォーマンスは詳しく測ってないですが、起動時間が改善しているように感じました。
今のところプリコンパイル対象になるのは普通のソースコードのみで、Razor に関しては今まで通りのようです。RTM までに Razor を含め、全てプリコンパイルするようになってほしいですね。
Azure Websites に Git でデプロイする場合には、予め SCM_KPM_PACK_OPTIONS に --no-source と --configuration Release を指定しておいた方が良い気がしました。あと kpm pack のメッセージが多すぎてめんどくさい場合には --quiet を付けておくと幸せになれそうです。
No.1 こと @kosmosebi がはまっていた kpm restore でこける件は、kpm pack で指定する構成を Release にしておくと発生しないようです。設定しておけば Visual Studio で作成したテンプレートのまま git push するだけで動作します。*1
あと kpm pack のオプションにどんなものがあるのか、ヘルプを引っ張ってきました。
Usage: kpm pack [arguments] [options] Arguments: [project] Path to project, default is current directory Options: -o|--out <PATH> Where does it go --configuration <CONFIGURATION> The configuration to use for deployment (Debug|Release|{Custom}) --overwrite Remove existing files in target folders --no-source Compiles the source files into NuGet packages --runtime <KRE> Name or full path of the KRE folder to include --native Build and include native images. User must provide targeted CoreCLR runtime versions along with this option. --wwwroot <NAME> Name of public folder in the project directory --wwwroot-out <NAME> Name of public folder in the packed image, can be used only when the '--wwwroot' option or 'webroot' in project.json is specified --quiet Do not show output such as source/destination of packed files -?|-h|--help Show help information
プリコンパイルする --no-source の他に面白そうなのは --native オプションでしょうか。CoreCLR をランタイムとして選択している場合には、ネイティブコードを吐き出してくれるようです。*2
そういえば、これまで KRuntime (KRE) と呼ばれていた部分は、ちょっと前に名前が変わって .NET Cross-Platform Runtime SDK (.NET XRE) になったようですね。
klr コマンドも名前が dotnet に変わるはずなので、次のバージョンから注意が必要になりそうです。
Rename klr to dotnet by ChengTian · Pull Request #1087 · aspnet/dnx · GitHub
でも、今のところ k や kpm コマンドは名前が変わっていないみたいです。統一されるとは思いますが。