zoukankan      html  css  js  c++  java
  • 构建高性能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的衔接时充沛的被运用了,可是图像下载的速度的确慢了,从图中看出,图像是一个个的次序的下载下来的。整个页面的呼应时刻可想而知。
       
    若是选用下一种方法,如: 
       
    能够看出衔接时多了,可是图像的简直都是并行下载下来的,比较而言就快多了。
       
    其实这就是一个权衡的问题了。
       
    实际上浏览器也是内置了以一些优化方法的,例如缓存图像,脚本等。或许选用并行下载图像的方法,谈到并行下载,就如上图所看到的,势必会耗费更多的衔接资源。

  • 相关阅读:
    401. Binary Watch
    46. Permutations
    61. Rotate List
    142. Linked List Cycle II
    86. Partition List
    234. Palindrome Linked List
    19. Remove Nth Node From End of List
    141. Linked List Cycle
    524. Longest Word in Dictionary through Deleting
    android ListView详解
  • 原文地址:https://www.cnblogs.com/javaitpx/p/2783923.html
Copyright © 2011-2022 走看看