async和defer的区别


async和defer是Javascript脚本加载的两种特性,主要区别是加载和执行时机不同:

  • 普通的script(不使用async和defer)加载完会立即执行,会阻塞script标签下面的资源加载和dom的解析
  • 使用async后,script加载完后会立即执行。(网络)资源的加载过程是异步的,不会阻塞后续资源的加载dom和解析。
  • 使用defer后,script异步加载,html解析之后执行、DomContentLoaded之前执行。

async和defer相同点

两者都是异步加载script,加载过程不会阻塞html的解析

async和defer不同点

  • async和defer执行时机不同,async加载完会立即执行,会阻塞html的解析;defer在html解析完,DomContentLoaded执行前执行
  • async不保证script的执行顺序(谁先加载谁先执行),defer在html解析完后按顺序执行

总结

  • defer使用频率较高,能保证变量之间的依赖顺序
  • async script执行会阻塞渲染,defer会等到html渲染完后执行,不会阻塞渲染

Leave a Reply

Your email address will not be published. Required fields are marked *