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

  • 相关阅读:
    WIN10 UBUNTU 异常:sleep: cannot read realtime clock: Invalid argument
    Mysql表名大小写忽略
    Spring boot自定义配置文件并映射到指定类中
    list addAll产生异常java.lang.UnsupportedOperationException
    Oracle extract函数提取时分秒的问题
    JOOQ默认schema
    Druid数据库连接失败,无限尝试问题
    Mysql安装后root无法登陆(Access denied for user 'root'@'localhost')
    JavaSE第17篇:集合之Map集合
    JavaSE第16篇:集合之Collection集合下篇
  • 原文地址:https://www.cnblogs.com/javaitpx/p/2783923.html
Copyright © 2011-2022 走看看