当前位置: 首页 > 新闻动态

专家论坛:基于ASP.NET 网站第一次访问速度慢原因研究-强讯科技

2013-08-18 强讯科技 供稿 【
  使用ASP.NET开发的网站第一次打开网站首页时特别慢,打开之后无论点哪个页面都很快。长时间无人访问,又会变慢,本文将详细解释其中原因。
   使用ASP.NET开发的网站(编辑工具:微软Visual Studio 2008 SP1 简体中文版,网站项目类型,.NET Framework 2.0;发布平台:Windows Server 2008 IIS7.0)第一次打开网站首页时特别慢,打开之后无论点哪个页面都很快。长时间无人访问,又会变慢,这对搜索引擎很不友好。如果第一次访问恰巧是搜索引擎抓取页面,由于相应时间过长,会被认为站点有问题,速度不稳定,严重的会影响排名。
  
   本文将详细解释其中原因。
   我们第一次向IIS7请求ASP.NET网页时,IIS会启动w3wp.exe进程,同时在C:\WINDOWS\ Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files (也可在IIS中自定义该目录)建立一个文件夹,并将网站相关的DLL等资源复制到该目录下(该步骤会占用一部分时间,我们成为PTime-1),然后JIT来运行这些DLL文件(该步骤也会占用一部分时间,我们成为PTime-2),最后将运行结果发送给客户端。
   第一次打开aspx页面变慢主要的时间是 (PTime-1 + PTime-2),其它的时间可以忽略不计。
   如果网站内容不更新(专指DLL更新,aspx、ascx等没有影响),网站重起(开机重启、超时回收重启、任务管理器中关闭w3wp.exe进程、执行IISRESET等),只有PTime-2,没有PTime-1。一旦内容不更新,下次再请求这个网页时又会重新创建一个临时目录,花费的时间是 (PTime-1 + PTime-2)。
    IIS 在这期间做了哪些工作呢? 当向服务器发送一个ASP.NET网页的请求时,在内部执行的流程如下:
    1、检查在服务器内存中是否存在这个网页对应的本地机器代码。
    2、如果存在,则执行本地机器代码,将运行结果发送到客户端。
    3、如果不存在本地机器代码,则检查是否存在这个网页编译后的中间代码(以DLL的形式存在),如果存在,则将中间代码编译成本地机器代码,再执行本地机器代码将结果返回给客户端,并将本地机器代码缓存到内存中。
    如果服务器没有清理掉内存中缓存的本地机器代码而再次访问同一个页面时,服务器就会直接执行缓存中的本地机器代码,本地机器代码的运行速度是相当快的。即使本地机器代码在内存中由于某些原因被清理掉了(比如服务器重启或者服务器内存不够用时被释放),也仅仅是将中间代码编译成本地机器代码,再次运行本地机器代码将运行结果发送给客户端,然后缓存本地机器代码即可,将中间代码编译成本地机器代码的速度也是很快的。
    
   如果站点中有HTM 等静态网页,则不需要PTime-1、PTime-2两个过程,执行速度都是很快的。

   如何解决首次加载慢的问题,目前没有好的办法,以下方案可供参考:
     1、延长IIS 回收时间
     2、通过百度站长等工具,设定搜索引擎抓取速度
     3、做一个浏览器模拟程序,定时访问网页
     4、升级到 Visual Studio 2012
  但无论如何,建议每次更新网站内容后,自己立即访问一下网站。
分享到:

北京强讯科技有限公司-呼叫中心专家 版权所有© 2013     客户服务热线:400-700-8003   

  • 联系电话    北京总部:010-82015266  上海:021-64865166  山东:0531-82368848  陕西:029-81872217  天津:022-23790824  武汉:027-87872010  广州:020-83503506