异步加载

来源:互联网 发布:网络博客行业 编辑:程序博客网 时间:2024/05/21 12:49

下面就是两种异步加载的语法。

上面代码中,标签打开defer或async属性,脚本就会异步加载。渲染引擎遇到这一行命令,就会开始下载外部脚本,但不会等它下载和执行,而是直接执行后面的命令。

defer与async的区别是:前者要等到整个页面正常渲染结束,才会执行;后者一旦下载完,渲染引擎就会中断渲染,执行这个脚本以后,再继续渲染。一句话,defer是“渲染完再执行”,async是“下载完就执行”。另外,如果有多个defer脚本,会按照它们在页面出现的顺序加载,而多个async脚本是不能保证加载顺序的

我的理解是: 这两个属性标签共同的部分是,浏览器都会给他们新开线程来下载,只是defer下载完后要等到整个页面渲染结束才执行,而async则是一旦下载完成就执行。

前面的异步下载部分是一样的。

加载规则浏览器加载 ES6 模块,也使用标签,但是要加入type=”module”属性。

上面代码在网页中插入一个模块foo.js,由于type属性设为module,所以浏览器知道这是一个 ES6 模块。

浏览器对于带有type=”module”的,都是异步加载,不会造成堵塞浏览器,即等到整个页面渲染完,再执行模块脚本,等同于打开了标签的defer属性。