async / defer

async / defer

共同点:

使用 async/defer 属性在加载脚本时,异步下载文件,不会阻塞页面解析;
async/defer 仅适用于外链( 内联的 script 标签是不起作用的 ),async规定脚本异步执行;

不同点:

执行时间:
async:脚本加载完成后就马上执行,脚本执行时会阻塞 HTML 解析;
defer:在 HTML 解析完成后, DOMContentLoaded 触发之前执行;整个页面在内存中正常渲染结束(DOM 结构完全生成,以及其他脚本执行完成),在window.onload 之前执行;

defer 用途其实跟 preload 十分相似。可以使用 defer 加载脚本在 head 末尾,这比将脚本放在 body 底部效果来的更好。

执行顺序:
defer:脚本保证是按顺序依次执行的。
async:在下载后尽快执行,不能保证脚本会按顺序执行。先下载完哪个就先执行哪个;脚本执行时会阻塞 HTML 解析。async是HTML5新增的,作用和defer类似;

defer 与 preload 差异

1、defer 相比于 preload 加载的优势在于浏览器兼容性好;
2、不足之处在于:defer 只作用于脚本文件,对于样式、图片等资源就无能为力了,并且 defer 加载的资源是要执行的,而 preload 只下载资源并不执行,待真正使用到才会执行文件。
3、对于页面上主/首屏脚本,可以直接使用 defer 加载,而对于非首屏脚本/其它资源,可以采用 preload/prefeth 来进行加载。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • HTML加载过程 1. 两个引擎 浏览器的引擎可以分为渲染引擎和 JS 引擎。 JS 引擎相对独立,而渲染引擎又包...
    康小曹阅读 536评论 0 1
  • 一个网页的有很多地方可以进行性能优化,比较常见的一种方式就是异步加载js脚本文件。在谈异步加载之前,先来看看浏览器...
    Aniugel阅读 1,649评论 1 1
  • async和defer 没有defer或者async,浏览器会立刻加载并执行脚本,“立即”指的是在渲染该scrip...
    mianmiani阅读 247评论 0 0
  • 没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下...
    饥人谷_Shirley阅读 1,055评论 0 0
  • defer和async是script标签的两个属性,用于在不阻塞页面文档解析的前提下,控制脚本的下载和执行。先了解...
    小囧兔阅读 686评论 1 2

友情链接更多精彩内容