不设置defer和async
网页加载是边渲染边加载js文件的,顺序如下:
1,加载html文件
2,如果遇到js文件,如果是外部js文件,则停止渲染html文档,下载js文件;如果是内部js,则执行js
3,js文件下载完毕后执行
4,执行完后继续渲染html文件
设置async
1,加载html文件
2,遇到js文件,不停止渲染html文档,下载html文件
3,js文件下载完毕后执行,停止渲染html文档
4,js文件执行完毕后继续渲染html文档
设置defer
1,加载html文件
2,遇到js文件,不停止渲染html文档,下载html文件
3,js文件下载完毕后,不停止渲染html文档
4,html文档渲染完毕后执行js文件
总结
正常:遇到js停止解析html,下载执行js,再解析渲染html
async:遇到js不停止解析,下载执行js,再解析渲染html
defer:遇到js不停止解析,下载js,解析渲染html,再执行js