使用 defer 和 async 加载 script 的区别

2021-03-04  本文已影响0人  弱冠而不立

推荐讨论区:defer 和 async 的区别

蓝色线代表网络读取,红色线代表执行时间,这俩都是针对脚本的;绿色线代表 HTML 解析。

浏览器是多线程的,但是JS执行线程和渲染线程是互斥的,这就意味着,要么先DOM渲染完,要么JS先执行完。不过,网络读取的线程和渲染线程并不是互斥的,所以可以边渲染页面边下载JS文件。当下载完后根据 defer 和 async 属性,去选择是等DOM渲染完后再执行JS,还是下载完后立刻暂停DOM渲染,然后立马执行JS脚本。

不使用任何属性 defer async
渲染时碰见script标签,暂停DOM渲染,先下载脚本,下载完后执行脚本。代码执行完后再渲染DOM 渲染时边下载脚本,下载完后先不执行JS代码,等DOM渲染完后再执行JS代码 渲染时边下载脚本,下载完后立马执行JS代码,先中断 DOM 的渲染
上一篇 下一篇

猜你喜欢

热点阅读