zoukankan      html  css  js  c++  java
  • 关于浏览器解析html全过程详解

    本人web前端菜鸟一枚,第一次在这里发博客梳理知识,知识都是从各地方查阅引用以及自己的理解得来,有什么错误的地方欢迎指正。

     

    DOM文档通常加载的步骤:

    1.解析HTML结构。

    2.加载外部脚本和样式表文件

    3.解析并执行脚本代码。

    4.DOM树构建完成。//DOMContentLoaded

    5.加载图片等外部资源。

    6.页面加载完毕。//load

    顺序是这样,但很多时候几个步骤是同时发生的。

      在这里梳理一下完整流程下的各种细节:

      由于浏览器采用至上而下的方式解析,所以会先解析html,直到遇到外部样式和外部脚本。这时会阻塞浏览器的

    解析,外部样式和外部脚本(在没有async、defer属性下)会并行加载,但是外部样式会阻塞外部脚本的执行。

      即:html解析->外部样式、脚本加载->外部样式执行->外部脚本执行->html继续解析

      情况一:如果是动态脚本(即内联脚本)则不受样式影响,在解析到它时会执行。

      情况二:外部样式后续外部脚本含有async属性(IE下为defer),外部样式不会阻塞该脚本的加载与执行

      在外部样式执行完毕后,css附着于DOM,创建了一个渲染树(渲染树是一些被渲染对象的集)。每个渲染对象都

    包含了与之对应的计算过样式的DOM对象,对于每个渲染元素来说,位置都经过计算,所以这里被叫做“布局”。然

    后将“布局”显示在浏览器窗口,称之为“绘制”。

      接着脚本的执行完毕后,DOM树构建完成。这时,可以触发DOMContentLoaded事件。

      DOMContentLoaded事件的触发条件是:在所有的DOM全部加载完毕并且js加载执行后触发。

      情况一如果脚本是动态加载,则不会影响DOMContentLoaded时间的触发

      浏览器会等css加载完成后再加载图片,因为不确定图片的样式会如何。  

      要点一:CSS样式表会阻塞图片的加载,如果想让图片尽快加载,就不要给图片使用样式,比如宽高采用标签属性即可。

      要点二:脚本不会阻塞图片的加载

      最后页面加载完成,页面load

     

  • 相关阅读:
    Centos7 GRE Tunnel
    centos 7 增加永久静态路由
    ceph bluestore与 filestore 数据存放的区别
    swift对象存储安装
    [WebRTC] Audio Codec Encoder 基类注解
    [WebRTC] 源码中的Audio Codec整理
    [Math] Maple函数用法
    [Server] Nginx Https配置 及 Firefox提示“此页面使用较弱加密”
    [Windows] 导出所有设置过的Group Policy
    [Tool] WebDav 安装及使用
  • 原文地址:https://www.cnblogs.com/ZpandaZ/p/7396879.html
Copyright © 2011-2022 走看看