defer和async都属于JS的延迟加载的方法
一、async模式
当浏览器遇到script标签时,文档的解析不会停止,其他线程将下载脚本,脚本下载完成后开始执行脚本,脚本执行的过程中文档将停止解析,直到脚本执行完毕。
二、defer模式
当浏览器遇到script标签时,文档的解析不会停止,其他线程将下载脚本,待到文档解析完成,脚本才会执行。
所以async和defer的最主要的区别就是async是异步下载并立即执行,然后文档继续解析,defer是异步加载后解析文档,然后再执行脚本。
推荐的应用场景
defer 如果你的脚本代码依赖于页面中的DOM元素(文档是否解析完毕),或者被其 他脚本文件依赖。
可以使用defer优化白屏的问题。解决白屏问题 解决白屏问题 解决白屏问题
例如:评论框
async如果你的脚本并不关心页面中的DOM元素(文档是否解析完毕),并且也不会产生其他脚本需要的数据。
例如:百度统计
如果不太能确定的话,用defer总是会比async稳定。。。