js时间线问题_纹心`的博客-程序员秘密

说js时间线之前先简单的思考一下html页面的渲染过程
在这里插入图片描述

js是逐行运行的解释性单线程语言

那么运行代码则会出现一些先后顺序,这些顺序组成的流程就成了时间线。

DOM树在加载过程中一共有三种阶段:

  1. DOM加载过程中——document.readyState = ‘loading’
  2. DOM加载完成——document.readyState = ‘interactive’
  3. 所有文件加载并下载完成——document.readyState = ‘complete’,此时window触发onload事件
document.onreadystatechange = function(){
    
	console.log(document.readyState);
}

这三个阶段有一个详细的过程

  1. document.readyState= 'loading’

    创建document对象,开始解析web页面。创建HTMLHtmlElement对象,添加到document中。

  2. 遇到link外部css,创建线程加载,并继续解析文档

    遇到script外部js,并且没有设置async、defer,阻塞,等待js加载完成并执行该脚本,然后继续解析文档

    (并发过程:)遇到script外部js,并且设置有async、defter,浏览器创建线程加载,并继续解析文档。禁止使用doucument.write
    async属性的脚本,脚本加载完成后立即执行。
    defter属性的脚本==丢置尾部。

    document.createElement(‘script’)的方式动态插入script元素来模拟async属性,实现脚本异步加载和执行。

    遇到img等,浏览器创建线程加载,并继续解析文档。

  3. document.readyState = 'interactive’

    文档已解析完成(dom树已经绘制完成) 文档解析完成后,所有设置有defer的脚本会按照顺序执行。(注意与async的不同)

    document对象触发DOMContentLoaded事件

  4. document.readyState = 'complete’

    当所有async的脚本加载完成并执行后、img等加载完成后,document.readyState = ‘complete’,window对象触发load事件。禁止使用doucument.write

  5. 以异步响应方式处理用户输入、网络事件等。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45165908/article/details/102395720

智能推荐

poj3083_Children of the Candy Corn__上善若水_的博客-程序员秘密

Children of the Candy CornTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8508 Accepted: 3729DescriptionThe cornfield maze is a popular Halloween treat. V

多线程中传参错误,以及'list' object is not callable错误解决方法_Goom_y的博客-程序员秘密

最近编写一个多线程爬取的小脚本,遇到’list’ object is not callable这个错误,发觉不对,我并没有list的这个函数啊,怎么会出现这个错误呢,于是Google大法,发现问题所在,在此将解决问题的过程记录下,方便以后查看。错误代码如下:file = open('1.txt','r')threads = []for line in file: thread = thr

蓝桥杯 ALGO-22算法训练 数的划分_蓝桥杯 数的划分_柳婼的博客-程序员秘密

问题描述  将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。  例如:n=7,k=3,下面三种分法被认为是相同的。  1,1,5; 1,5,1; 5,1,1;  问有多少种不同的分法。输入格式  n,k输出格式  一个整数,即不同的分法样例输入7 3样例输出4 {四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;}数据规模和约定  6<n<=200,2&lt...

<dl>~<dt>~<dd>_shiliye_csdn的博客-程序员秘密

■ 定义&lt;dl&gt;标签用于定义描述列表(或定义列表)自定义列表常用于对术语或名词进行解释和描述,定义列表的列表项前没有任何项目符号dl代表单词Definition List,意为定义列表dt代表单词Definition Term,意为定义术语dd代表单词Definition Description,意为定义描述■ 使用说明该标签会与&lt;dt&gt;(定义项目/名字)和...

PTA c++ 选择判断题总结_在静态成员函数中可以调用同类的其他任何成员函数_ice_bear-的博客-程序员秘密

不知不觉一年就又结束了,整理完才感叹我已经做过这么多题了吗,希望能帮到你,加油呀(有一些可能有重复)有什么问题记得留言哦

随便推点

KindEditor空格问题_kindeditor 空格_b__d的博客-程序员秘密

问题描述:网站的页面提交需要用到KindEditor来进行富文本提交。在编辑文章时,需要用到空格来进行排版,每次提交保存到数据库后,在页面显示没问题,但从后台进行第二次修改编辑的时候,空格不在了。问题解决:问题出在从数据库读出数据后,再次放入富文本编辑器的时候。从数据库读出来的内容要做一下替换后再放到textarea标签之中,替换的代码如下        String content=re

iOS 基础类解析 - NSData_ios nsdata數據中為什麼有f_LVXIANGAN的博客-程序员秘密

OverviewNSData and its mutable subclass NSMutableData provide data objects, object-oriented wrappers for byte buffers. Data objects let simple allocated buffers (that is, data with no embedded po

PostGis 根据经纬度查询两点之间距离_阳光__小好的博客-程序员秘密

-- 创建几何表CREATE table geometry_table( gid serial primary key, name varchar, geom geometry(geometry,4326));-- 查询当前数据库中所有空间数据表的描述信息select * from geometry_columns-- 查询几何表select * from geome...

什么是桌面安全管理系统_xiaong的博客-程序员秘密

桌面安全管理系统是基于企业电脑桌面端的内网安全管理软件系统。一般分为桌面端应用策略管理、远程桌面维护、网络访问策略、移动存储设备管理、系统补丁统一分发和企业资产管理等等功能。企业桌面安全管理系统的出现一部分原因是为了弥补杀毒软件的不足而产生的市场需求。传统企业信息安全管理中,杀毒软件占据非常重要的位置,但即使是现在杀毒软件安装和升级即时的情况下,企业信息安全也很难完全保障。首先,杀毒软件目前无法查

DNN7中的CSS布局(二)/Table布局CSS_missautumn的博客-程序员秘密

在DNN中常用的布局经常会用到表格布局,虽然table对css的支持不咋地,但是对于传统的asp.net程序员来说这还是绕不开的坎。在时下流行的bootstrap中对table元素也有很好的支持。那DNN7中对Table的支持怎么样呢?还是先看看我原来后台管理模块中Table悲催的样式--当然也是我偷懒的结果^_*然后再看看我在应用DNN7中针对table元素的css样式后的界面(还是

在Ubuntu中怎样访问win10的D、E盘符_hsy7862323887的博客-程序员秘密

命令 sudo apt-get install ntfs-3g //安装ntfs-3gsudo ntfsfix /dev/sda5 //对盘符D进行修复sudo ntfsfix /dev/sda6//对盘符E进行修复

推荐文章

热门文章

相关标签