构建高性能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都需求解析,那么每次的恳求都有一点的时刻耗费,能够这个时刻耗费很短,可是功能的晋升就是一点点的出来的。若是把对应URLIP地址缓存起来,那么当再次恳求相同的URL时,浏览器就不用去解析,而是直接读取缓存,这样势必会快一点。
   
其实浏览器和操作体系是供给了这样的撑持的。
   
当获得了IP地址之后,那么浏览器就向服务器发送HTTP的恳求,下面广州达内就略微看下这个发送恳求是怎样样被发送的:
    1
    浏览器经过发送一个TCP的包,需求服务器翻开衔接。
    2
    服务器也经过发送一个包来应对客户端的浏览器,通知浏览器衔接开了。
    3
    浏览器发送一个HTTPGET恳求,这个恳求包括了许多的东西了,例如咱们常见的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地址如下:

代码
   
恳求这些图像的时刻耗费如下图: 
   
咱们首要看到最上面的黄线的有些,这个黄线就代表了浏览器翻开衔接,黄线的后半有些为蓝色,就表明浏览器恳求到了html的文档。
   
最上面的第二条蓝线就表明第一个图像现已恳求到了,此刻恳求这个图像运用仍是之前的一个tcp的衔接。
   
咱们在看到第三条线,前有些是黄色的,表明恳求第二个图像的时分又开了一个tcp的衔接,这条线的后半有些为蓝色,表明图像现已恳求到了。
   
剩余的要恳求的一些图像都运用上一个tcp衔接。
   
的确,tcp的衔接时充沛的被运用了,可是图像下载的速度的确慢了,从图中看出,图像是一个个的次序的下载下来的。整个页面的呼应时刻可想而知。
   
若是选用下一种方法,如: 
   
能够看出衔接时多了,可是图像的简直都是并行下载下来的,比较而言就快多了。
   
其实这就是一个权衡的问题了。
   
实际上浏览器也是内置了以一些优化方法的,例如缓存图像,脚本等。或许选用并行下载图像的方法,谈到并行下载,就如上图所看到的,势必会耗费更多的衔接资源。

原文地址:https://www.cnblogs.com/javaitpx/p/2783923.html