为什么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中Server.MapPath的使用
- asp.net小数点四舍五入
- ASP.NET网站的404错误页面的设置
- ASP.NET记录错误日志的方式有哪些
- ASP.NET中Server对象的用法
- asp.net MVC处理流程
- Asp.net中params的使用
- asp.net判断上传文件格式
- ASP.NET泛型约束
- asp.net 消息队列
- ASP.NET使用JavaScriptSerializer实现序列化与反序列化
- ASP.NET的Random随机数
- asp.net将Excel文档转换成pdf
- netcorelinux后台运作(Linux系统Docker 部署 ASP.NET Core应用的流程分析)
- ASP.NET实现FTP上传文件
- asp.net func 委托
- 泰国美女(泰国人妖和女性如何区分)
- 泰国旅游业怎么样(泰国的旅游产业)
- 越南新娘(越南新娘婚介网站)
- 越南新娘(越南新娘骗婚套路流程)
- 菲律宾游学(菲律宾游学中介机构)
- 菲律宾美食(菲律宾美食排行榜前十名)
热门推荐
- php怎么设置curl(php curl发送请求实例方法)
- 小鸟云服务器免流搭建(小鸟云服务器如何进行数据盘挂载?Windows)
- dede织梦怎么在文章下面添加图片(dedecms织梦模板用array调用多个自定义字段并判断的方法)
- mysql 索引举例(MySQL 各个索引的使用详解)
- mysql建立索引的主要目的(浅谈Mysql哪些字段适合建立索引)
- js数组排序有哪些(js将多维数组转为一维数组后去重排序)
- docker 查看目录映射(docker 文件存放路径, 修改端口映射操作方式)
- visual studio中快速定位打开的文件所处的树形路径
- iframe向子页面发送消息(使用postMessage让 iframe自适应高度的方法示例)
- dedecms文章点击量(Dedecms文章标题及文章摘要长度修改的方法)