async和defer

1. 起源:

因为一般情况下script.js的加载是 立即且单线程的,它会马上加载,而且阻塞其他元素(如文件、图片、html标签等)的加载。若js文件过大,加载时间过长,就会造成css样式、图片、html标签等没有加载,此时会产生诸如白屏等现象。

2. 常见处理方式:

通常将script.js写在页面底部,是引入script.js的代码最后执行。

3. 引入async和defer

也可以引入异步加载async,或者延迟加载defer来解决。

1.  async:html5中新增的属性,它的作用是能够异步的加载和执行脚本,不因为加载脚本而阻塞页面的加载。
2.  defer:一个script加了defer属性,即使放在head里面,它也会在html页面解析完毕之后再去执行,也就是类似于把这个script放在了页面底部。

4. 异同点

  • 相同点:
    1. 加载文件时不阻塞页面渲染。
    2. 对于inline的script无效。
    3. 使用这两个属性的脚本中不能调用document.write方法。
    4. 有脚本的onload的事件回调。
  • 不同点:
    1. html4.0中定义了defer,html5.0中定义了async。
    2. defer有顺序,async无顺序:

async属性的脚本会在下载结束后立刻执行,同时会在window的load事件之前执行,所以就会出现顺序被打乱的情况;defer属性的脚本是在页面解析完成后,按照顺序执行,同时会在document的DOMContentLoaded之前执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下...
    饥人谷_Shirley阅读 965评论 0 0
  • async和defer 没有defer或者async,浏览器会立刻加载并执行脚本,“立即”指的是在渲染该scrip...
    mianmiani阅读 214评论 0 0
  • 加载异步 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 scrip...
    饥人谷_tanfei阅读 207评论 0 0
  • async和defer这两个的作用与异同之处。 引用语句中添加 async的状态 ,添加完成后,加载和渲染后续文...
    小羊熊阅读 298评论 0 0
  • 自问为何如此在乎他人的看法,为何追求完美,为何不允许自己失败,都源于内在深深的恐惧:害怕不被认可,害怕失去别人的爱...
    Looloo阅读 265评论 2 1