ASP.NET 第一次加载慢的解决方法

ASP.NET 第一次加载慢的解决方法

原因

根据网上的资料,第一次加载慢的原因大概有以下几种:

  1. ASP.NET 默认是动态编译的,第一次时间都浪费在编译加载上了。
  2. 第一次运行需要验证数字签名。
  3. Entity Framework初始化造成的。在首次使用时,Entity Framework会根据数据库中的信息在内存生成一个映射视图(mapping views),操作非常耗时。

解决方案

目前还没有一个统一的,解决方案,具体的可以尝试以下几种方案:

  1. 预编译,参考ASP.NET 网站预编译概述
  2. 去掉数字签名,参考关于asp.net程序第一次运行速度慢的问题解决办法
  3. 使用“预加载模块”,参考IIS 8.0 Application Initialization

参考资料

  1. http://www.allytel.com/_app_data/news/2013/news_20130818_121818.aspx
  2. http://q.cnblogs.com/q/59572/
  3. http://q.cnblogs.com/q/45228/
  4. http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization(IIS 8)
    a. 安装预加载模块
    b. 应用程序池-高级设置-启动模式:AlwaysRunning
    c. 应用程序池-高级设置-进程模型-闲置超时:1740 (分钟)
    d. 应用程序-高级设置-常规-预加载已启用:True
  5. http://www.cnblogs.com/shanyou/archive/2010/12/21/1913199.html (IIS 7.5)
  6. http://www.cnblogs.com/chehaoj/p/3432100.html (IIS 7.5)
  7. http://blog.csdn.net/rnhhb/article/details/46625097 (IIS 7.5)
  8. http://blog.hackroad.com/operations-engineer/windows_server/2633.html (IIS 7.5)
  9. http://www.cnblogs.com/wangjinsns/p/4015762.html?utm_source=tuicool&utm_medium=referral (ServiceAutoStartProvider)
  10. http://www.cnblogs.com/dudu/p/entity-framework-warm-up.html (Entity Framework)

经本人测试,方案1和方案2,对于.NET 4.5 IIS8 已经无效,使用方案3解决此问题。

iis 6 7 8预加载,提升web访速

iis 6 7 8预加载,提升web访速

原创 2017年08月01日 15:50:18

IIS 6,7

当我们把网站部署在IIS7或IIS6S的时候,每当IIS或是ApplicationPool重启后,第一次请求网站反应总是很慢,原因大家都知道(不知道可以参考这个动画说明ASP.NET网页第一个Request会比较慢的原因)。所以每次网站更新都会给第一个用户代号不好的用户体验,因此之前大家得通过撰写仿真模拟访问动作或预编译来解决此问题。但自从Windows 2012出来之后,这部分ApplicationInitialization功能已经有内含在IIS8之中,可以直接进行设定就可以。不过微软也发布了针对针对前期的IIS单独模块:ApplicationInitialization Module for IIS 7.5 。

 

  • 支持的操作系统有 Windows 7、Windows Vista、Windows Vista SP1、Windows XP SP2+、Windows Server 2003 SP1+、Windows Server 2008、Windows Server 2008 R2。

安装完毕后要求重启。有文说模块安装完毕后,在IIS里能看到关于次模块图标,不过我是没见着。为解决此问题,得再安装ApplicationInitialization for UI,才有办法让IIS出现UI可以进行设定。安装完毕后,在IIS控制置模块中会出现一个Application Initialization图标,此时我们就可以开始设定了:

Warm Up设定方式满简单的,主要针对Application Pool层级或是Web Site层级两者进行设定

1.Application Pool层级:只要有需要的Application Pool的Start Mode设定AlwaysRunning就可以

2.Web Site层级:选择你们要做Preload的Web Site。

选择好Web Site之后,记得下图红框地方要打勾,若是当网站初始化时间要很久话,可以再Splash Page定义初始化网页说明

说明网站正在初始化,让用户感觉比较友善

IIS 8

1、本文以IIS8,Windows Server 2012R2做为案例

2、IIS8 运行在 Windows Server 2012 and Windows 8 版本以上的平台上。

3、IIS中应用程序池和网站是单独存在的,但是网站运行必须建立在对应的应用程序池启动的前提下。

4、默认情况下,应用程序池在不活动情况下(无请求操作),一段时间后,将被IIS自动回收掉。

5、IIS8 自带应用程序初始化工具包,IIS7.5要搜索独立安装包进行安装,低于7.5的暂时不支持IIS自动初始化。

6、此案例方式能解决ASP.Net第一次访问慢,间隔一段时间后,又访问慢的问题。

 

1、安装IIS应用程序初始化功能

如下图:

2、编辑网站对应应用程序池启动模式

如下图,操作路径:应用程序池 -> 网站对应程序池 -> 右键,高级设置 ->选择,启动模式 AlwaysRunning

3、开启对应网站预加载

如下图,操作路径:网站 -> 对应网站 -> 右键,高级设置 ->选择,预加载已启用 True

4、设置配置编辑器,编写默认预加载请求

如下图,打开配置编辑器

 

如下图:在左上角配置节点选择system.webServer/applicationInitialization,其他配置如红圈中

 

如下图:在集合中添加一个初始化请求地址(用于IIS初始化默认请求地址),添加完成后,点击配置界面右侧的应用按钮,并重启应用程序池和网站

 

  备注:

1、原理说明:IIS应用初始化会在网站第一次创建后或者对应网站的应用程序池回收后,自动开启新程序池,并启动网站初始化,模拟一次正常请求,使网站一直处于在线状态。

(此流程可以借助第三方工具或者服务模拟网站请求达到相同目的)

2、配置说明:

(1)、启用应用程序池(AlwaysRunning):保证应用程序池在第一次创建或者被回收后,能自动再次重启运行。

(2)、启用网站程序预加载(true):保证程序池在启动过后,网站能响应预加载动作。

(3)、配置网站默认预加载路径:保证程序在程序池启动后,网站预加载过程中,能快速编译程序并进驻内存,保证请求快速响应。