有人说是razor文件预编译影响了这个时间,个人没有完全去证实(使用RazorGenerate或者其他可以事先编译razor文件,规避预编译)。
目前有几个预想的解决方案,看看大家有没有更好更优雅的办法呢?
1.使用RazorGenerate编译Razor文件,这个弊端一是所有cshtml文件都要去修改属性配置,不知道还有没有其他需要改动的,嫌麻烦,而且不知道是不是团队里所有人都得装这个东西。弊端二是把修改即可见的路子堵死了。
2.修改固定回收时间和进程空闲超时时间都为43200(分钟),也就是30天。这样的话30天才有一个人中彩,总比天天有人中彩好多了(原来是29个小时回收一次)。但是不知道服务器扛不扛得住。
3.方案2的衍生版,固定回收时间设置为0,人为去回收,之后自己去访问一次。
4.第一次奇慢,之后速度特别快,也就是说第一次做了之后访问没有做的事(预编译?)。能不能把这个动作找到,在每次回收/进程消亡/32%@#$(也就是系统进行了某些动作,会产生预编译行为,在进行这些动作之后紧接着我们先把这个预编译给做了)。不知是否有人实现过这类配置。
5.简单暴力,固定回收时间设置为默认的1720,也就是29小时,同时写一个windows服务每隔一段时间去请求一次网站。自己把坑踩了。
如果是动态编译的原因,可以通过aspnet_compiler进行预编译,参考:关于ASP.NET预编译。
一些组件的初始化也会造成第1次访问速度慢,比如Entity Framework初始化就要8~9秒。
要真正解决问题,需要使用IIS的应用程序初始化特性(Application Initialization)。
原来是个扩展,是只对IIS7.5和更高级的版本有效吗
在win server 2012服务器上,IIS8默认有这个功能项,勾选以后点击站点/虚拟目录,在应用程序高级设置中-proloadEnabled选为true即可?
IIS8测试成功,IIS7.5上面发现装了那个扩展以后还是没有看到预加载这个项,在windows功能里面也找不到“应用程序初始化”这一项。
@空葫芦: 推荐一篇文章:IIS 8.0 Application Initialization
@dudu: thx村长!