【基础知识】【转】彻底搞懂 async & defer
普通 script
先来看一个普通的 script 标签。
<script src="a.js"></script>
浏览器会做如下处理
- 停止解析 document.
- 请求 a.js
- 执行 a.js 中的脚本
- 继续解析 document
defer
<script src="d.js" defer></script>
<script src="e.js" defer></script>
- 不阻止解析 document, 并行下载 d.js, e.js
- 即使下载完 d.js, e.js 仍继续解析 document
- 按照页面中出现的顺序,在其他同步脚本执行后,
DOMContentLoaded事件前 依次执行 d.js, e.js。
async
<script src="b.js" async></script>
<script src="c.js" async></script>
- 不阻止解析 document, 并行下载 b.js, c.js
- 当脚本下载完后立即执行。(两者执行顺序不确定,执行阶段不确定,可能在
DOMContentLoaded事件前或者后 )
其他
- 如果 script 无 src 属性,则 defer, async 会被忽略
- 动态添加的 script 标签隐含 async 属性
结论
- 两者都不会阻止 document 的解析
- defer 会在 DOMContentLoaded 前依次执行 (可以利用这两点哦!)
- async 则是下载完立即执行,不一定是在 DOMContentLoaded 前
- async 因为顺序无关,所以很适合像 Google Analytics 这样的无依赖脚本
Reference
- http://www.growingwiththeweb.com/2014/02/async-vs-defer-attributes.html
- http://peter.sh/experiments/asynchronous-and-deferred-javascript-execution-explained/
- http://javascript.tutorialhorizon.com/2015/08/11/script-async-defer-attribute/
- http://stackoverflow.com/questions/10808109/script-tag-async-defer
- https://segmentfault.com/q/1010000000640869
转载地址:https://github.com/xiaoyu2er/blog/issues/8
【基础知识】【转】彻底搞懂 async & defer的更多相关文章
- 基础篇|一文搞懂RNN(循环神经网络)
基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...
- C# 彻底搞懂async/await
前言 Talk is cheap, Show you the code first! private void button1_Click(object sender, EventArgs e) { ...
- 5分钟带你彻底搞懂async底层实现原理!
ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖.研究 async 的原理,就必须先弄清楚 Genera ...
- 【原创】【基础】一文搞懂严蔚敏数据结构SqList &L和SqList L、ElemType &e和ElemType e
旁白 最近小渔夫在看严蔚敏.李冬梅<数据结构 c语言版>(第2版),学到第二章顺序表的实现时,看到函数参数一会是SqList &L.一会又是SqList L.一会ElemType ...
- 菜鸟的java代码审计之旅-0之java基础知识
前言: 对于java的代码审计我就是一个小白,没有代码基础(不会java),从0开始记录我的java漏洞的审计学习之旅.对于java来说是一门很难的语言,但是不去学习就永远不会.对于一门很复杂的语言如 ...
- C#复习笔记(5)--C#5:简化的异步编程(异步编程的基础知识)
异步编程的基础知识 C#5推出的async和await关键字使异步编程从表面上来说变得简单了许多,我们只需要了解不多的知识就可以编写出有效的异步代码. 在介绍async和await之前,先介绍一些基础 ...
- 【RL-TCPnet网络教程】第18章 BSD Sockets基础知识
第18章 BSD Sockets基础知识 本章节为大家讲解BSD Sockets,需要大家对BSD Sockets有个基础的认识,方便后面章节Socket实战操作. (本章的知识点主要整理自 ...
- 【RL-TCPnet网络教程】第16章 UDP用户数据报协议基础知识
第16章 UDP用户数据报协议基础知识 本章节为大家讲解UDP(User Datagram Protocol,用户数据报协议),需要大家对UDP有个基础的认识,方便后面章节UDP实战操作. ...
- 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
第12章 TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...
- Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!
本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...
随机推荐
- Django 自定义创建密码重置确认页面
要实现上述功能,你需要修改模板文件以添加"忘记密码"链接,并创建新的视图函数来处理密码丢失修改页面.验证和密码修改.下面是你可以进行的步骤: 1. 修改模板文件 在登录页面的表单下 ...
- [oeasy]python0004_游乐场_和python一起玩耍_python解释器_数学运算
和python玩耍 Python 回忆 上次 了解shell环境中的命令 命令 作用 whoami 显示当前用户名 pwd 显示当前文件夹 ls 列出当前文件夹下的内容 python3 仿佛进入大于号 ...
- JMeter 配置元件之按条件读取CSV Data Set Config
实践环境 win10 JMeter 5.4.1 需求描述 需求是这样的,需要压测某个接口(取消分配接口),请求这个接口之前,需要先登录系统(物流WMS系统),并在登录后,选择并进入需要操作的仓库,然后 ...
- 前端使用 Konva 实现可视化设计器(18)- 素材嵌套 - 加载阶段
本章主要实现素材的嵌套(加载阶段)这意味着可以拖入画布的对象,不只是图片素材,还可以是嵌套的图片和图形. 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue ...
- 【AppStore】IOS应用上架Appstore的一些小坑
前言 上一篇文章写到如何上架IOS应用到Appstore,其中漏掉了些许期间遇到的小坑,现在补上 审核不通过原因 5.1.1 Guideline 5.1.1 - Legal - Privacy - D ...
- mybatisplus关于驼峰命名法与下划线的映射
今天遇到一个很坑的事情,我在测试之前的案例的时候我有一个字段的名字是typeId,我调试之后发现插入出现了错误. 开启sql日志之后我发现mybatisplus自动把我的typeId改成type_id ...
- agnostic在计算机领域的常用翻译 —— location-agnostic deployment option
关于agnostic的翻译: 例子: NVIDIA OSMO scales workloads across distributed environments. For robotics worklo ...
- 【转载】 实时调度论文中经常出现的术语 ties broken arbitrary的意思 —— 看伪代码时出现 ties broken arbitrary
看伪代码时突然看到这样的一个Ps标注, ties broken arbitrary, 不明白是啥意思,后来看到下文:https://blog.csdn.net/kangkanglhb88008/ar ...
- React 高德地图 进京证 路线规划 问题小记
一.加载问题 用高德地图做了个进京证路线规划的功能,官网也是有 React 代码示例.但是吧,这个Demo有问题,地图是能加载成功,但是其他功能再用 map 这个变量肯定不行,果不其然是null,处理 ...
- CRC算法原理、推导及实现
CRC, Cyclic Redundancy Check, 循环冗余校验 1. 基本原理 CRC的本质是除法,把待检验的数据当作一个很大(很长)的被除数,两边选定一个除数(有的文献叫poly),最后得 ...