同步加载:
html是按顺序执行的,script标签中未加入defer和async时,浏览器在解析文本的时候遇到script标签就会停止解析,去解析script里面的内容。
如果scrpit里有外部文件,那就必须等待下载和执行完毕,浏览器才会继续往下执行,如果外部文件刚好是在网络比较差的服务器上,整个网页的加载都会受到很大的影响。造成阻塞。
async和defer
会使JS异步加载,解决阻塞问题,即html执行到script标签时,JS脚本的加载和html文档的解析同时进行,
区别:
async:在js脚本加载完成以后立即执行。
defer:js脚本加载完成后,会等待html文档解析(解析html创建dom树)完毕后,再执行js脚本。