为什么asp.net网站第一次加载慢
为什么asp.net网站第一次加载慢
为什么asp.net网站第一次加载慢其实在我们第一次向IIS请求ASP.NET网页时,相应的网页就会被编译成DLL文件,然后JIT来运行这个DLL文件,并将运行结果发送给客户端。一旦这个文件再次编辑这个ASP.NET页面后,下次再请求这个网页时又会重新被编译成DLL文件,再由JIT来运行。为了防止发生生成的文件重名的情况,生成的DLL文件采用了随机命名。
当向服务器发送一个ASP.NET网页的请求时,在内部执行的流程如下:
① 检查在服务器内存中是否存在这个网页对应的本地机器代码。
② 如果存在,则执行本地机器代码,将运行结果发送到客户端。
③ 如果不存在本地机器代码,则检查是否存在这个网页编译后的中间代码(以DLL的形式存在),如果存在,则将中间代码编译成本地机器代码,再执行本地机器代码将结果返回给客户端,并将本地机器代码缓存到内存中。
④ 如果不存在对应的中间代码,则将这个网页编译成中间代码,然后将中间代码编译成本地机器代码,将本地机器代码的执行结果发送给客户端,再将本地机器代码缓存到内存中。
如图所示的是ASP.NET运行时流程图。
从图中可以看出,如果在服务器没有清理掉内存中缓存的本地机器代码而再次访问同一个页面时,服务器就会直接执行缓存中的本地机器代码,本地机器代码的运行速度是相当快的。即使本地机器代码在内存中由于某些原因被清理掉了(比如服务器重启或者服务器内存不够用时被释放),也仅仅是将中间代码编译成本地机器代码,再次运行本地机器代码将运行结果发送给客户端,然后缓存本地机器代码即可,将中间代码编译成本地机器代码的速度也是很快的。
这也就是ASP.NET网页不同于其它语言编写的网页的地方:ASP.NET页面在第一次请求时会被编译成DLL文件,再由JIT编译成本地机器代码执行,并且将本地机器代码缓存,如果在缓存没有清空之前再次调用,则会直接执行缓存中的机器代码,即使内存中缓存的机器代码被清空也会再次将中间代码编译成本地机器代码运行并缓存。不过,aspx页面第一次被打开时比较慢,因为存在着先生成中间代码再编译成本地机器代码执行的过程;以后执行时就会比较快了。因为以后执行时要么是直接运行本地机器代码,要么是将中间代码编译成本地机器代码再运行,除非修改了代码;否则就没有必要重新生成中间代码了,并且对于第一次运行时比较慢的情况也可以通过预编译来解决。
- Asp.Net实现网站的快捷方式
- Asp.net Mvc模型绑定
- ASP.NET Web API是什么
- asp.net MVC处理流程
- ASP.NET的Random随机数
- ASP.NET中重载(Overload)和覆写(Override)
- ASP.NET函数返回多个值的几种方法
- ASP.NET中() => 的含义
- ASP.NET服务器端执行脚本的通用方法
- ASP.NET获取网页中的图片
- ASP.NET身份验证方式
- ASP.NET URLRewriter伪静态
- ASP.NET mvc异常处理的方法
- ASP.NET下载远程图片到本地
- ASP.NET中lock 的用法
- 如何注册asp.net 4.0 到iis
- 得这个 难治病 的人太多了,300个人赶到杭州商量怎么办(得这个难治病的人太多了)
- 经度,世界时间腕表的灵魂(世界时间腕表的灵魂)
- 阿里最新财报公布 三季度营收增长3 ,将增加150亿美元回购额度 在美股价小涨(阿里最新财报公布)
- 赵薇时胖时瘦 最近变美少女 原因在这里 躺着就变瘦(赵薇时胖时瘦最近变美)
- 学会这26种姿势,你就可以和兵哥哥切磋了(你就可以和兵哥哥切磋了)
- 吴彦祖陈冠希 恩怨 ,失去曾让他流泪的女友,终遇走过18年真爱(吴彦祖陈冠希恩怨)
热门推荐
- yii2对比springboot(Yii框架函数简单用法分析)
- php重定向网页(phpStudy V8设置301重定向跳转的实现方法)
- php环境搭建apache(apache 支持 php5 的配置方法)
- dedecms是静态吗(dedecms全站伪静态的实现方法及注意事项)
- python读取mat文件(详解Python Matplot中文显示完美解决方案)
- mysql效率查询(MySQL 如何分析查询性能)
- docker从一个容器中退出来(Docker容器迁移到其他服务器的5种方法详解)
- django登录模块(Django实现单用户登录的方法示例)
- mysql索引原理及调优(MySQL索引机制程序员必知)
- python和mysql实战(由Python编写的MySQL管理工具代码实例)