浏览器是如何进行加载、解析、渲染的?
1.当用户访问页面时,DNS服务器(域名解析系统)会通过域名查找对应的IP地址,找到后,会向对应IP地址的网络服务器发送一个请求
2.网络服务器解析请求,并把请求发给数据库服务器
3.数据库服务器会将请求数据返回给网络服务器,网络服务器解析数据,并生产HTML文件,放入http response中,返回给浏览器
4.浏览器解析html response。

1-4  需要先了解http协议  
访问服务器可能遇到的问题:
http response 404:网络服务器无法获取数据库服务器返回的资源文件
http response 500:由于并发原因暂时无法处理用户的http请求  (请求的这个页面正好是一个有异常发生的页面,或者不存在的页面)

5.浏览器解析html response后,需要下载html文件,以及html文件包含的外部引用文件,以及包含的图片或者多媒体文件

加载
加载顺序:当浏览器获得html文件后,自上而下加载,并在加载过程中解析渲染

加载是为获取资源文件的过程;不同浏览器,不同版本之间实现的效果不同(需工具timeliness测试)

  <html>
       
     <head>
                  
           <meta charset="utf-8">
                 
          <link rel="stylesheet"  href="test.css"  type="text/css" />
                 
           <script src="test.js" type="text/javascript"></script>
                         
     </head>
                                               
     <body>
                              
           <p>阻塞</p>
                      
           <img src="test.jpg" />
                          
    </body>
                         
 </html>

加载过程中遇到外部css文件,浏览器另外发出一个请求,来获取css文件。
遇到图片资源,浏览器也会另外发出一个请求,来获取图片资源。这是异步请求,并不会影响html文档进行加载,但是当文档加载过程中遇到js文件,html文档会挂起渲染(加载解析渲染同步)的线程,不仅要等待文档中js文件加载完毕,还要等待解析执行完毕,才可以恢复html文档的渲染线程。

原因:JS有可能会修改DOM,最为经典的document.write,这意味着,在JS执行完成前,后续所有资源的下载可能是没有必要的,这是js阻塞后续资源下载的根本原因。
办法:可以将外部引用的js文件放在前。

Posted on 2017-04-04 22:03  Ligod  阅读(118)  评论(0编辑  收藏  举报