关于浏览器解析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

时间: 2024-10-03 01:35:11

关于浏览器解析html全过程详解的相关文章

浏览器解析html全过程详解

http://www.cnblogs.com/lhb25/p/how-browsers-work.html#Main_flow_examples http://blog.csdn.net/u014168594/article/details/52196460

iOS企业证书网页分发全过程详解(图文并茂史无前例的详细哦)

iOS企业证书网页分发全过程详解 苹果的企业级证书发布的应用,是不用设备授权即可直接安装,并且不限设备上限.为了方便分发,苹果有协议实现通过网页链接直接下载安装企业级的应用. 首先需要说明它的原理:基本的原理就是在生成企业证书授权的ipa的同时,要生成一个对应的plist文件,plist文件中会配置ipa的下载地址.版本信息.Bundle ID 等信息,通过网页下载的时候其实下载的是这个plist文件,然后苹果通过自己的协议根据plist文件的配置信息去自动的下载安装app. 这里有个地址用来生

谷歌地图地理解析和反解析geocode.geocoder详解(转)

谷歌地图地理解析和反解析geocode.geocoder详解 谷歌Geocoder服务 实例代码 地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程. 地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国贵州省贵阳市南明区翠微巷7号 邮政编码: 550002)的过程. 受当地法律限制及各方面原因,国内很多地图并不包含地理解析和反解析功能(地理解析和反解析功能功能不够强悍),Google永远是最棒的. 要

谷歌地图地理解析和反解析geocode.geocoder详解

地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程. 地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国贵州省贵阳市南明区翠微巷7号 邮政编码: 550002)的过程.受当地法律限制及各方面原因,国内很多地图并不包含地理解析和反解析功能(地理解析和反解析功能功能不够强悍),Google永远是最棒的.废话不多说要使用到Google map 地理解析和反解析功能,我们需要了解google.maps.Geo

【Android】解析JSON数据详解

Android解析JSON数据详解 JSON(JavaScript Object Notation) 定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON的结构: (1) Name/Value Pairs(无序的):类似所熟知的Keyed list. Has

GCC全过程详解+剖析生成的.o文件[转]

使用GCC编译一个.c文件影藏了哪些过程? GCC四步详解第一步:预处理(也叫预编译)        gcc -E  hello.c  -o hello.i        或者 cpp hello.c > hello.i     [cpp是预编译器]        将所有#define删除,并且展开所有的宏定义        处理所有的条件预编译指令,如#if #ifdef  #undef  #ifndef  #endif #elif        处理#include,将包含的文件插入到此处,

MySQL Binlog 解析工具 Maxwell 详解

maxwell 简介 Maxwell是一个能实时读取MySQL二进制日志binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis.RabbitMQ.Redis.Google Cloud Pub/Sub.文件或其它平台的应用程序.它的常见应用场景有ETL.维护缓存.收集表级别的dml指标.增量到搜索引擎.数据分区迁移.切库binlog回滚方案等.官网(http://maxwells-daemon.io).GitHub(https://github.com/zende

Python学习之Argparse 解析脚本参数详解

Argparse 是 Python 标准库中推荐的命令行解析模块,经常需要解析脚本参数的话这是个方便的工具模块,摆脱万年手动 system.argv .本文和大家分享的就是python中Argparse解析脚本参数相关内容,一起来看看吧,希望对大家学习python有所帮助. 引入 import argparse parser = argparse.ArgumentParser(description='描述说明,可用于 Help 输出说明', add_help=True) parser.pars

Chrome浏览器调试,console详解

作为一个前端开发者,不可避免的需要进行各种各样的调试. 在谷歌浏览器出来以前,火狐的firebug是特别有名的一款调试工具,不过自从谷歌浏览器诞生以来,其自带的开发者工具足以媲美firebug,某种程度上甚至超越了firebug. 虽然这篇介绍谷歌调试工具,但是还是要说一句,火狐的调试工具依然强大.二者都是业界调试工具的佼佼者. 谷歌开发者工具功能丰富,包括代码审查,样式调整,性能优化以及其他更高级的功能,调试方式多种多样,不一而足. 这里主要介绍控制台的console 打开控制台 Window