参考学习:https://www.cnblogs.com/zuobaiquan01/p/8477322.html
有关promise的学习:
https://blog.csdn.net/shuidinaozhongyan/article/details/71702992
- 如果 async=“async”:脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行)
- 如果不使用 async 且defer=“defer”:脚本将在页面完成解析时执行
- 如果既不使用 async 也不使用 defer:在浏览器继续解析页面之前,立即读取并执行脚本
(1) defer,只支持IE
页面已加载后才会运行脚本:
注意:defer 属性仅适用于外部脚本(只有在使用 src 属性时)。
defer属声明脚本中将不会有document.write和dom修改。浏览器会并行下载其他有defer属性的script。而不会阻塞页面后续处理。
(2) async属性:HTML5新属性。
脚本将在下载后尽快执行,作用同defer,但是不能保证脚本按顺序执行。他们将在onload事件之前完成。
(3)1.。向DOM中写入script(head后第一个/script之前、onload绑定事件)
2。XHR注入 创建iframe
对于支持HTML5的浏览器,实现JS的异步加载只需要在script元素中加上async属性,为了兼容老版本的IE还需加上defer属性;
对于不支持HTML5的浏览器(IE可以用defer实现),可以采用以上几种方法实现。原理基本上都是向DOM中写入script或者通过eval函数执行JS代码,你可以把它放在匿名函数中执行,也可以在onload中执行,也可以通过XHR注入实现,也可以创建一个iframe元素,然后在iframe中执行插入JS代码。
JS的加载分为两个部分:下载和执行。
延迟下载 :异步
延迟执行:缓存