JavaScript异步加载与加载时间线

上一篇 JavaScript浅层克隆和深层克隆
下一篇 JavaScript事件处理模型 — 事件冒泡,捕获


文章目录

  • JavaScript异步加载与加载时间线
  • 前言
  • 一、js异步加载
  • 二、加载时间线

前言

js 是单线程的,会阻断 HTML,css 加载(因为 js 会修改 html 和 css 一起加载会乱), 所以是同步加载 js。先下载 js,再下载 HTML 和 css。常规来说 js 是同步加载的,所 以我们讲讲 js 异步加载的情况


一、js异步加载

  • js 加载的缺点:加载工具方法没必要阻塞文档,过得 js 加载会影响页面效率,
    一旦网速不好,那么整个网站将等待 js 加载而不进行后续渲染等工作。
  • 有些工具方法需要按需加载,用到再加载,不用不加载。
  • javascript 异步加载的方案
    1.async 异步加载,加载完就执行,async 只能加载外部脚本,不能把 js 写在 script 标签里。ie9 以上可以用,w3c 标准
    2.创建 script,插入到 DOM 中,加载完毕后 callBack(按需加载,方便)→常用
    callback叫回调函数,是事件里面一个绑定的事件处理函数,当满足一定执行条件才执行的函数。

二、加载时间线

js 加载时间线:依据 js 出生的那一刻起,记录了一系列浏览器按照顺序做的事(就
是一个执行顺序)js 时间线步骤(创建 document 对象==>文档解析完==>文档解析完加载完执行完)

1、创建 Document 对象,开始解析 web 页面。解析 HTML 元素和他们的文本内容
后添加 Element 对象和 Text 节点到文档中。这个阶段 document.readyState =
‘loading’。

2、遇到 link 外部 css,创建线程,进行异步加载,并继续解析文档。

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

4、遇到 script 外部 js,并且设置有 async、defer,浏览器创建线程异步加载,并继
续解析文档。对于 async 属性的脚本,脚本加载完成后立即执行。(异步禁止使用 document.write(),因为当你整个文档解析到差不多,再调用 document.write(),会把之前所有的文档流都清空,用它里面的文档代替)

5、遇到 img 等(带有 src),先正常解析 dom 结构,然后浏览器异步加载 src,并继
续解析文档。 看到标签直接生产 dom 树,不用等着 img 加载完 scr。

6、当文档解析完成(domTree 建立完毕,不是加载完毕),document.readyState =
‘interactive’。

7、文档解析完成后,所有设置有 defer 的脚本会按照顺序执行。(注意与 async 的不
同,但同样禁止使用 document.write());

8、document 对象触发 DOMContentLoaded 事件,这也标志着程序执行从同步脚本
执行阶段,转化为事件驱动阶段。

9、当所有 async 的脚本加载完成并执行后、img 等加载完成后(页面所有的都执行
加载完之后),document.readyState = ‘complete’,window 对象触发 load 事件。

10、从此,以异步响应方式处理用户输入、网络事件等。

7.JavaScript异步加载与加载时间线相关推荐

  1. 网页javascript加载不出_写给初学者的JavaScript异步编程和背后思想

    导读:对于接触JavaScript这门编程语言没有多久的本菜鸡而言,在相当长的一段时间内,我都完全无法理解这门语言中的异步编程,不明白什么叫异步编程以及为什么需要异步编程.为什么顺序执行程序就不行了呢 ...

  2. javascript异步加载

    这里先解释html在浏览器的一般加载流程. 用户输入搜索内容,浏览器发送搜索内容到服务器,服务器返回html文件.这个过程十分复杂,包含多个层次的数据传输.这里只讨论js代码加载,不再展开. 浏览器加 ...

  3. css 同步加载,同步加载,异步加载,懒加载,预加载

    同步加载 默认的就是同步加载 同步加载: 同步模式又称阻塞模式,会阻止浏览器的后续处理,停止了后续的文件的解析,执行,如图像的渲染.流览器之所以会采用同步模式,是因为加载的js文件中有对dom的操作, ...

  4. 【JavaScript】图片的懒加载

    [JavaScript]图片的懒加载 文章目录 [JavaScript]图片的懒加载 1. 懒加载 2. 利用`scroll`事件 利用`HTMLElement.offsetTop` 利用`Eleme ...

  5. 关于html和javascript在浏览器中的加载顺序问题的讨论

    转自:http://www.cnblogs.com/beyondstorm/archive/2008/09/17/1292940.html 前一阵子横扫了javascript,当时自我感觉良好.现在一 ...

  6. 关于html和javascript在浏览器中的加载顺序问题的讨论(zz)

    前一阵子横扫了javascript,当时自我感觉良好.现在一想,又觉得没什么.今天的任务是把asp.net ajax中客户端页面生命周期那一章研究完.然而,因为这一章的内容使我产生了一些迷惑.这些疑惑 ...

  7. 第一百四十一节,JavaScript,封装库--DOM加载

    JavaScript,封装库--DOM加载 DOM加载,跨浏览器封装DOM加载,当网页文档结构加载完毕后执行函数,不等待图片音频视频等文件加载完毕 /** dom_jia_zai()函数,DOM页面加 ...

  8. echars vue 添加数据没更新_vue在使用ECharts时的异步更新和数据加载详解

    前言 最近在学习eCharts,学习到了异步更新和数据加载这一块,觉着有必要总结一下,方法以后的时候参考学习,在开始本文之前,对eCharts不熟悉的朋友们可以参考下这篇文章:下面话不多说了,来一起看 ...

  9. JavaScript基础——滚动事件、加载事件、三大家族

    文章目录 一.滚动事件和加载事件 1.1 滚动事件 1.2 加载事件 二.三大家族 2.1 scroll家族 2.2 offset家族 2.3 client家族 一.滚动事件和加载事件 1.1 滚动事 ...

最新文章

  1. Nacos 2.0 性能提升十倍,贡献者 80% 以上来自阿里之外
  2. 如何使用TCP套接字的端口来区分是哪个客户端发起的连接
  3. android json 解析图片路径,Android 使用Gson解析Asset 目录下的.json文件
  4. Git 学习笔记之 merge
  5. MicroNets:更小更快更好的MicroNet,三大CV任务都秒杀MobileNetV3
  6. SQL常用的几个窗口函数
  7. [terry笔记]Oracle10g/11g安装-redhat5.5
  8. 领导开会为什么总爱在桌子上摆一个水杯?
  9. 剑指offer面试题[64]-数据流中的中位数
  10. 【Redis】Redis学习(四) Redis Sentinel模式详解
  11. python 线程(创建2种方式,锁,死锁,递归锁,GIL锁,守护进程)
  12. BeanUtils,PropertyUtils
  13. pandas从时间序列中判断是一周的第几天或星期几
  14. cpu测试稳定性软件,测试CPU稳定性工具Prime95
  15. 学习软件测试必备的网站清单,建议收藏!
  16. PHICOMM(斐讯)N1盒子 - Armbian5.77(Debian 9)配置自动连接WIFI无线网络
  17. 单片机编程系列之分层设计2(怎样合理拆分子系统)
  18. Java向word中插入Excel文件对象
  19. Android美化EditText
  20. 算法定义及其主要特征

热门文章

  1. C语言数据类型32位和64位不同
  2. python datatype函数_python 数据类型 datatype
  3. ajax datatype 文件,关于ajaxFileUpload中dataType的有关问题
  4. 2021数模国赛B题
  5. C语言quantity用法,quantity是什么意思?
  6. JS:滑动窗口算法 (上集)
  7. MathType重装之后遇到错误,可能的解决方法
  8. 深富策略:指数联袂深蹲调整 科技成长逆势领涨!
  9. 开贴梳理沉淀多年来的测试知识,帮助自己总结成长
  10. c语言中数据的输入输出格式解析