为什么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中Web.config文件的配置
- asp.net小数点四舍五入
- ASP.NET获取网页中的图片
- ASP.NET全角与半角相互转换
- ASP.NET中Server对象的用法
- ASP.NET下载远程图片到本地
- ASP.NET身份验证方式
- asp.net lambda表达式
- ASP.NET方法重载
- Asp.Net中索引器的用法
- ASP.NET使用JavaScriptSerializer实现序列化与反序列化
- asp.net后台输出js脚本
- ASP.NET URL路径问题
- asp.net中Session的操作
- asp.net中Server.MapPath的使用
- ASP.NET常用加密解密方法
- 越南特产(越南特产首饰)
- TVB负评王连续挑战警察角色《使徒行者3》中将饰演卧底(TVB负评王连续挑战警察角色使徒行者3中将饰演卧底)
- 《精英律师》剧照首曝光,实力演员飙戏,演绎律政职场百态(精英律师剧照首曝光)
- 靳东领衔打造高精职场 新丽出品《精英律师》曝定妆照(靳东领衔打造高精职场)
- 靳东新剧《精英律师》定档,众星云集,这剧可追(靳东新剧精英律师定档)
- 精英律师 廖佳敏封印恋情曝光,顾婕马失前蹄 你个老不死的(廖佳敏封印恋情曝光)
热门推荐
- sql对象资源管理在哪(SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用)
- php中function函数的用法(PHP中quotemeta函数的用法讲解)
- phpstudy配置教程(phpStudy2018安装教程及本地服务器的配置方法)
- sql server重建索引
- 小鸟云服务器怎么买(小鸟云服务器忘记密码怎么办?小鸟云密码找回图文教程)
- centos安装sql server(Centos 7.3下SQL Server安装配置方法图文教程)
- python列表精讲33节(Python列表知识应知应会)
- mysql查询killed状态的进程(MySQL kill指令使用指南)
- linux用nvm安装nodejs(nodejs管理工具nvm安装过程详解)
- linux中ceph的状态(Wdcp linux控制面板配置多PHP版本记录)