构建高性能ASP.NET站点之一 剖析页面的处理过程
时间:2011-11-25 10:16来源:www.2xp.cn 作者:2xp资讯网 点击:
次
剖析页面的剖析历程 页面的剖析历程,这里说的历程不是我们常说的ASP.NET页面的生命周期的历程,而且浏览器请求一个页面,然后浏览器泛起页面的历程。 在本篇的文章中,我会先叙
|
剖析页面的剖析历程 页面的剖析历程,这里说的历程不是我们常说的ASP.NET页面的生命周期的历程,而且浏览器请求一个页面,然后浏览器泛起页面的历程。 在本篇的文章中,我会先叙述页面的剖析历程,显示从整体上叙述,然后在每一个点上提出优化的要领。先整体,后局部。 当浏览器在请求一个Web页面是从URL最先的。下面就是历程形貌: 1. 输进URL地址或者点击URL的一个链接。 2. 浏览器凭证URL地址,团结DNS,剖析出URL对应的IP地址。 3. 发送HTTP请求。 4. 最先毗连请求的服务器而且请求相关的内容(至于请求时怎么被处置赏罚的,我们这里暂时不讨论,只是后面的文章要讨论的问题)。 5. 浏览器剖析从服务器端返回的内容,而且把页面展现出来,同时也继续举行其他的请求。 上面基本上就是一个页面被请求到现实的历程。下面我们就最先剖析这个历程。 当输进URL之后,浏览器就要知道这个URL对应的IP是什么,只有知道了IP地址,浏览器才气准备的把请求发送到指定的服务器的详细IP和端口号上面。 浏览器的DNS剖析器认真把URL剖析为准确的IP地址。这个剖析的事情是要花时间的,而且这个剖析的时间段内,浏览器不是能从服务器那里下载到任何的工具的。可是这个剖析的历程是可以优化的。试想,若是每次浏览器每次请求一个URL都需要剖析,那么每次的请求都有一点的时间消耗,可能这个时间消耗很短,可是性能的提升就是一点点的“调”出来的。若是把对应URL和IP地址缓存起来,那么当再次请求相同的URL时,浏览器就不用往剖析,而是直接读取缓存,这样势必会快一点。 着实浏览器和使用系统是提供了这样的支持的。 当获得了IP地址之后,那么浏览器就向服务器发送HTTP的请求,下面我们就稍微看下这个发送请求是怎么样被发送的: 1. 浏览器通过发送一个TCP的包,要求服务器打开毗连。 2. 服务器也通过发送一个包来应答客户真个浏览器,告诉浏览器毗连开了。 3. 浏览器发送一个HTTP的GET请求,这个请求包罗了许多的工具了,例如我们常见的cookie和其他的head头信息。 这样,一个请求就算是发过往了。 请求发送往之后,之后就是服务器的事情了,服务器真个法式,例如,浏览器清晰的文件是一个ASP.NET的页面,那么服务器端就把请求通过IIS交给ASP.NET 运行时,最后举行一系列的运动之后,把最后的效果,虽然,一样平常是以是以html的形式发送到客户端。 着实首先到达浏览器的就是html的那些文档,所谓的html的文档,就是纯粹的html代码,不包罗什么图片,剧本,css等的。也就是页面的html结构。由于此时返回的只是页面的html结构。这个html文档的发送到浏览器的时间是很短的,一样平常是占整个响应时间的10%左右。 这样之后,那么页面的基本的骨架就在浏览器中了,下一步就是浏览器剖析页面的历程,也就是一步步从上到下的剖析html的骨架了。 若是此时在html文档中,遇到了img标签,那么浏览器就会发送HTTP请求到这个img响应的URL地址往获取图片,然后泛起出来。若是在html文档中有许多的图片,flash,那么浏览器就会一个个的请求,然后泛起。 到这里,各人也许感受到这种方式有点慢了。确实这个图片等资源文件的请求的部门也是可以优化的。暂不说此外,若是每个图片都要请求,那么就要举行之前说的那些步骤:剖析url,打开tcp毗连等等。开毗连也是要消耗资源的,就像我们在举行数据库会见一样,我们也是尽可能的少开数据库毗连,多用毗连池中的毗连。原理一样,tcp毗连也是可以重用的。可是重用也有问题:若是两个图片它们的url地址如下:
代码 <img src="q1.gif" height="16" width="16" /> <img src="q2.gif" height="16" width="16" /> <img src="q3.gif" height="16" width="16" /> <img src="q4.gif" height="16" width="16" /> <img src="q5.gif" height="16" width="16" /> <img src="q6.gif" height="16" width="16" /> <img src="q7.gif" height="16" width="16" /> <img src="q8.gif" height="16" width="16" /> <img src="q9.gif" height="16" width="16" /> <img src="q10.gif" height="16" width="16" /> 请求这些图片的时间消耗如下图: 各人首先看到最上面的黄线的部门,这个黄线就代表了浏览器打开毗连,黄线的后半部门为蓝色,就体现浏览器请求到了html的文档。 最上面的第二条蓝线就体现第一个图片已经请求到了,此时请求这个图片使用照旧之前的一个tcp的毗连。 各人在看到第三条线,前部门是黄色的,体现请求第二个图片的时间又开了一个tcp的毗连,这条线的后半部门为蓝色,体现图片已经请求到了。 剩下的要请求的一些图片都使用上一个tcp毗连。 确实,tcp的毗连时充实的被使用了,可是图片下载的速率确实慢了,从图中看出,图片是一个个的顺序的下载下来的。整个页面的响应时间可想而知。 若是接纳下一种方式,如: 可以看出毗连时多了,可是图片的险些都是并行下载下来的,相比而言就快多了。 着实这就是一个权衡的问题了。 现实上浏览器也是内置了以一些优化方式的,例如缓存图片,剧本等。或者接纳并行下载图片的方式,谈到并行下载,就如上图所看到的,势必会消耗更多的毗连资源。


(责任编辑:admin) |
------分隔线----------------------------